我有这个jsf代码
<h:form>
<h:inputText value="#{agreement.serviceId}"/>
<h:commandButton value="Enter" action="#{agreement.build}" />
<h:form rendered="#{!agreement.valid}">
<h:outputText value="Service id not valid. Please try again"/>
</h:form>
<h:form>
这是scoped bean的构建方法。
public String build(){
try{
...//lots of backend logic
valid = true;
return "/agreementDetail.xhtml?faces-redirect=true";
}catch(Exception e){
valid = false;
return null;
}
}
基本上,这是我需要的行为:
用户输入serviceId。如果此服务标识有效,则会将用户重定向到agreementDetail.xhtml页面。如果为false,则用户仍保留在main.xhtml页面中,并且呈现“Service id not valid ...”消息。
这就是发生的事情:
如果用户输入了正确的服务ID,一切正常。如果用户返回main.xhtml并输入错误的服务ID,则会正确显示错误。但是现在,如果用户输入了正确的服务ID,则不会执行build()方法。(我已经通过日志记录确认了这一点)。
基本上,一旦用户输入了错误的值,除非用户注销并再次登录,否则不会再次执行build()方法。显然,当build()发现错误并捕获异常时会发生一些事情。
有什么想法吗?
答案 0 :(得分:0)
您正在代码中嵌套表单。这在JSF / HTML中是不允许的。你应该用<h:panelGroup>
替换内部表格,一切都应该没问题。