2011-04-15 53 views
0

我有一个h:commandLink在数据表的一列中。JSF :: h:commandLink onsubmit(return validateRow(this))问题

JSF

<h:commandLink id="save" actionListener="#{ApplicationManagerBean.update}" 
rendered="#{routeappcode.edit}" 
value="save" onclick="return validateRow(this)"/> 

生成的HTML是

<a id="routeappcodesummary:summarytable:2:save" 
onclick="var cf = function(){return validateRow(this)}; 
var oamSF = function(){return oamSubmitForm('routeappcodesummary','routeappcodesummary:summarytable:2:save');};return (cf()==false)? false : oamSF();" 
    href="#">save</a> 

钻嘴鱼科1.2_15

<a href="#" onclick="var a=function(){return validateRow(this);};var b=function() 
{if(typeof jsfcljs == 'function'){jsfcljs(document.getElementById('j_id_jsp_1765393453_2'), 
{'j_id_jsp_1765393453_2:j_id_jsp_1765393453_3:0:j_id_jsp_1765393453_7':'j_id_jsp_1765393453 
_2:j_id_jsp_1765393453_3:0:j_id_jsp_1765393453_7'},'');}return false};return (a()==false) ? 
false : b();">test</a> 

这里的onclick生成的JavaScript封装在JSF标签提供的脚本。

function validateRow(link){ 
    //link is not a link object but some window object. 
    var parent = link.parentNode; 
} 

这里在JavaScript函数中,我们没有得到一个链接对象,而是一个窗口对象。 原因是在JSF标记中提供的脚本被封装,并且由于该值 引用更改。

我该如何解决这个问题,以便我可以在我的脚本中获得链接对象?

使用onmouseup不会在IE 6

工作中使用JSF 1.2

+0

我记得在4-5年前发布的古代Mojarra 1.2版本的问题,但我不认识自动生成的'oamSF'变量名称。你正在使用什么1.2 impl/version ** **?较新的Mojarra应该在webapp启动时记录日志,否则只需提取impl JAR文件并读取MANIFEST.MF文件。如果仍然不确定,请升级到最新版本并重试。 [Mojarra](http://javaserverfaces.java.net/)目前在1.2_15。 – BalusC 2011-04-15 22:20:52

+0

它与最新的mojarra一样。 – changed 2011-04-15 22:56:34

+0

Google知道我生成的代码是MyFaces的典型代码。你真的替代了Mojarra吗?如果生成的代码是相同的,那么它肯定没有被正确地升级/替换。 – BalusC 2011-04-16 03:40:04

回答

0

你的确不能给你的JavaScript函数参考this,为onclick代码将在JavaScript函数进行封装。

您可以尝试使用一些JavaScript代码在validateRow()函数中找到此链接元素,作为one proposed by Stig Henriksen

另一个想法是添加你的链接上 CSS类,并使用这个类搜索你的元素:

<h:commandLink id="save" actionListener="#{ApplicationManagerBean.update}" 
    rendered="#{routeappcode.edit}" value="save" 
    onclick="return validateRow();" styleClass="saveLink"/> 

然后,在你的JavaScript代码(我使用jQuery在这里,但你可以使用纯JS代替):

function validateRow() { 
    // We retrieve a jQuery object: 
    var jQueryObject = $("a.saveLink"); 
    // If you prefer to get a "pure" JavaScript object 
    var pureJavaScriptObject = $("a.saveLink").get(0); 
    // continue your work here... 
} 
0

不知道为什么JSF这样做,但这里是获取使用jQuery的链接解决方法:

<h:commandLink id="save" actionListener="#{ApplicationManagerBean.update}" 
    rendered="#{routeappcode.edit}"value="save" 
    onclick="return validateRow($('a[id*=save]')[0])"/>