2013-08-01 59 views
0

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

这里是我的代码:

<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"/> 

回答

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属性来优先确认验证,那么这会失败。

0

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

欲了解更多信息,请参阅here