错误捕获后尝试执行方法时出错

时间:2013-08-20 21:11:06

标签: jsf jsf-2

我有这个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()发现错误并捕获异常时会发生一些事情。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您正在代码中嵌套表单。这在JSF / HTML中是不允许的。你应该用<h:panelGroup>替换内部表格,一切都应该没问题。