带有输入文本的CommandLink

时间:2013-08-01 11:44:27

标签: jsf

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

这是我的代码:

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

2 个答案:

答案 0 :(得分:1)

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

但是,您的logout命令似乎完全独立,并且同一表单中的所有其他输入与logout命令完全无关。

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

  1. 将logout命令放在自己的表单中。

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

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


  2. 告诉logout命令仅在提交时处理它自己。

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

    默认为@form,表示“整个表单”。只有在出于某种原因绝对不能选择单独的表单时才使用此选项(例如,由于CSS设计不佳和/或不熟悉基本的HTML / CSS)。


  3. 滥用immediate属性。

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

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

答案 1 :(得分:0)

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

有关详细信息,请参阅here