0

我的页面中有输入文本、命令链接和注销图像。当我在输入文本中使用“必需”时,我的命令链接不起作用。否则它工作正常。

这是我的代码:

<p:commandLink action="#{loginForm.logout}">
    <p:graphicImage value="images/logout.png" alt="Logout" style="width: 50px;height: 50px;" title="Logout"/>
</p:commandLink>
<p:inputText id="fname" required="true"/>
4

2 回答 2

1

命令链接和按钮默认提交整个表单。<p:messages autoUpdate="true">在这种情况下,输入字段正在被验证并给出“此字段是必需的”验证错误(如果您对服务器日志有更多的爱和关注,您应该注意到这一点)。

但是,您的注销命令似乎完全独立,并且相同形式的所有其他输入与注销命令完全无关。

有几种解决方案,按推荐顺序排列:

  1. 以自己的形式放置注销命令。

    <h:form>
        <p:commandLink value="Logout" ... />
    </h:form>
    <h:form>
        Other form.
    </h:form>
    

    这使得设计在技术上和语义上最有意义。


  2. 告诉注销命令在提交时只处理它自己。

    <p:commandLink value="Logout" process="@this" ... />
    

    这默认即@form表示“整个表单”。仅当由于某种原因(例如由于糟糕的 CSS 设计和/或不精通基本 HTML/CSS)而绝对不能选择单独的表单时才使用此选项。


  3. 滥用immediate属性。

    <p:commandLink value="Logout" immediate="true" ... />
    

    这将绕过所有没有immediate属性的输入。但是,当确实存在确实需要immediate属性来优先验证的输入时,这将失败。

于 2013-08-01T12:32:38.953 回答
0

这是因为该操作在验证阶段被阻止。添加immediate="true"到您的commandLink,它应该可以正常工作。

有关更多信息,请参见此处

于 2013-08-01T12:21:07.403 回答