大家好我有一些输入框,用户可以输入详细信息并提交它,这需要一些验证,而不是null等等这一切都很好,但是我有一个导航按钮回家如果用户有错误地或者某些东西来到这个页面,但是当用户按下这个按钮时它也会调用验证并要求用户输入详细信息,这对于主页按钮来说是不行的,有什么方法我不能进行验证运行时用户按下此按钮?它是一个primefaces命令按钮
这里是代码,如果我使用链接我可以导航很好,但对于用户体验我宁愿使用命令按钮
<h:form>
<p:growl id="growl" showDetail="true" sticky="true" />
<!--ajax messages working now -->
<p:panel header="Enter details">
<h:panelGrid columns="2">
<h:outputLabel value="#{bundle.CreateUserdetailsLabel_id}" for="id" />
<h:inputText id="id" value="#{userdetailsController.selected.id}" title="#{bundle.CreateUserdetailsTitle_id}" required="true" requiredMessage="#{bundle.CreateUserdetailsRequiredMessage_id}"/>
<h:outputLabel value="#{bundle.CreateUserdetailsLabel_username}" for="username" />
<h:inputText id="UserName" value="#{userdetailsController.selected.username}" title="#{bundle.CreateUserdetailsTitle_username}" required="true"
requiredMessage="Username is required"
label="UserName" >
<f:validator validatorId="richard.validator.UserNameValidator" />
</h:inputText>
</h:panelGrid>
<br />
<p:commandButton action="#{userdetailsController.create}" value="#{bundle.CreateUserdetailsSaveLink}" update="growl"/>
<br />
<br />
<p:commandButton action="#{userdetailsController.prepareList}" value="#{bundle.CreateUserdetailsShowAllLink}" immediate="true"/>
</p:panel>
<br />
<br />
<!--
Trying to use a command button to navigate however it is requiring the user enter details first and this is not acceptable so looking for a solution
<p:commandButton action="{naviagation.buttonHome}" value="Home" icon ="ui-icon-home" ajax="False"/>
<p:commandButton action="{bundle.ListUserdetailsIndexLink}" value="List of all current records" icon ="ui-icon-person" ajax="False"/>
-->
<h:link outcome="/index" value="#{bundle.ListUserdetailsIndexLink}"/>
</h:form>
感谢
答案 0 :(得分:3)
为了页面到页面的导航,您不应该提交整个表单并触发POST请求。这不仅错误,而且对用户体验和SEO也不利。
改为使用<p:button>
。
<p:button value="Home" outcome="/index" icon="ui-icon-home" />
<p:button value="List of all current records" outcome="/list" icon="ui-icon-person" />
如果你真的需要调用一个动作(我宁愿传递一个请求参数,而是让目标视图的<f:event>
/ <f:viewAction>
在其上执行业务逻辑),那么添加{{ 1}}到process="@this"
以避免整个表单被处理。请注意,<p:commandButton>
用于完全不同的目的,不应用于绕过整个表单处理的特定要求。
答案 1 :(得分:0)
找到解决方案
将immediate="true"
添加到命令按钮,该按钮应跳过没有immediate="true"
的所有输入字段的处理
属性。