h:commandLink和onclick Javascript函数

ke3*_*pup 0 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>
Run Code Online (Sandbox Code Playgroud)

上面的内容放在一个表中,用户可以勾选复选框并单击上面的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;
 }
Run Code Online (Sandbox Code Playgroud)

并在命令链接中单击以: 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>
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.谢谢

小智 5

问题是你总是回来.我想你想要的只是在必要时返回false,否则继续.

所以改变你的onclick

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

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