h:commandLink和onclick Javascript函数

时间:2011-10-18 07:18:15

标签: jsf seam

我有以下代码和平:

<DIV>
    <h:commandLink action="#{documentGen.generatePDF}"
        target="_blank"
        onclick="return checkSelected();">
        <h:graphicImage url="/images/pdf.jpg"
        styleClass="pdfimage" title="Click to show PDF"></h:graphicImage>
    </h:commandLink>
</DIV>

以上内容放在一个表格中,用户可以勾选复选框并单击上面的commandLink,这意味着打开一个新窗口并显示由backbean #{documentGen.generatePDF}生成的内容。

如果我包含onclick="return checkSelected();",这可以正常工作。如果我包含它然后从不调用backbean,而是我得到一个新窗口,它是当前的重复。

我需要这个javascript函数来检查用户是否至少选中了1个复选框,否则显示警告。 Javascript函数工作正常,如果在单击commandLink时没有勾选复选框,我会看到警报。

我的问题是,为什么onclick会搞乱commandLink的作用?我究竟做错了什么?

更新

h:commandLink位于h:form内。如上所述,上面的命令链接按预期工作,没有onclick=....

要测试我将onclick上调用的javascript函数更改为:

function testFunc() {
        alert("GOT Here!")
        return ture;
 }

并在命令链接中点击:onclick="return testFunc();"

结果是我收到警告“GOT Here!”但和以前一样,新窗口是当前窗口的副本,并且不会调用backbean。删除onclick行会更正结果(但需要使用javascript函数检查已选中的复选框)。

在浏览器源代码视图中,没有onclik和onclick的commandlink之间的区别如下:

  <a href="#" onclick="return oamSubmitForm('genView','genView:_idJsp33','_blank',[]);" id="genView:_idJsp33" target="_blank"><img src="/images/pdf.jpg" title="Click for Pdf Document" class="pdfimage"></a>


  <a href="#" onclick="return testFunc();;return oamSubmitForm('genView','genView:_idJsp33','_blank',[]);" id="genView:_idJsp33" target="_blank"><img src="/images/pdf.jpg" title="Click for Pdf Document" class="pdfimage"></a>

任何帮助将不胜感激。谢谢

2 个答案:

答案 0 :(得分:5)

问题是你总是回来。我认为你想要的只是在必要时返回假,否则继续。

因此,请将您的onclick更改为

onclick="if (checkSelected()) { return false; }"

这肯定是Ajax提交表单的问题,因为如果您之前返回,则永远不会调用提交。我可以想象,这也适用于标准表单。

答案 1 :(得分:0)

如果在commandLink的onclick事件中返回false,则不会提交表单