我在页面中输入了文本,命令链接和注销图像。当我在输入文本中使用“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"/>
答案 0 :(得分:1)
命令链接和按钮默认提交整个表单。在这种情况下,输入字段正在验证并给出了“此字段是必需的”验证错误(如果您有<p:messages autoUpdate="true">
或者已经更多地关注服务器日志,您应该注意到这一点)。
但是,您的logout命令似乎完全独立,并且同一表单中的所有其他输入与logout命令完全无关。
有几种解决方案,按推荐顺序排列:
将logout命令放在自己的表单中。
<h:form>
<p:commandLink value="Logout" ... />
</h:form>
<h:form>
Other form.
</h:form>
这使得设计在技术和语义上最有意义。
告诉logout命令仅在提交时处理它自己。
<p:commandLink value="Logout" process="@this" ... />
默认为@form
,表示“整个表单”。只有在出于某种原因绝对不能选择单独的表单时才使用此选项(例如,由于CSS设计不佳和/或不熟悉基本的HTML / CSS)。
滥用immediate
属性。
<p:commandLink value="Logout" immediate="true" ... />
这将绕过不具有immediate
属性的所有输入。但是当实际存在做需要immediate
属性来确定验证优先级的输入时,这会失败。
答案 1 :(得分:0)
这是因为在验证阶段阻止了操作。将immediate="true"
添加到commandLink
,它应该可以正常工作。
有关详细信息,请参阅here。