繁体   English   中英

JSF :: h:commandLink onsubmit(返回validateRow(this))问题

[英]JSF:: h:commandLink onsubmit(return validateRow(this)) problem

我在数据表的某一列中有ah:commandLink。

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>

Mojarra 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标记中提供的脚本已封装,并且由于参考值的更改。

如何解决此问题,以便可以在脚本中获取链接对象?

在IE 6中无法使用onmouseup

使用JSF 1.2

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

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

实际上,您无法为JavaScript函数提供this的引用,因为onclick代码将封装在JavaScript函数中。

您可以尝试使用一些JavaScript代码在validateRow()函数中找到此link元素,如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...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM