2013-08-20 179 views
0

后执行的方法我有这样的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> 

这是范围的bean的构建方法。

public String build(){ 
    try{ 
    ...//lots of backend logic 
    valid = true; 
    return "/agreementDetail.xhtml?faces-redirect=true"; 
    }catch(Exception e){ 
    valid = false; 
    return null; 
    } 
} 

基本上,这是我需要的行为:

用户输入一个服务Id。如果此服务ID有效,则会将用户重定向到agreementDetail.xhtml页面。如果为false,则用户保留在main.xhtml页面中,并呈现“Service id not valid ...”消息。

这是发生了什么:

如果用户输入正确的服务ID,一切工作正常。如果用户返回到main.xhtml并输入了错误的服务ID,则错误显示正确。但是现在,如果用户输入正确的服务ID,则不会执行build()方法(我已经通过日志记录证实了这一点)。

基本上,一旦用户输入了错误的值,build()方法将不会再次执行,除非用户签名并再次登录。很显然,当build()发现错误并捕获异常时会发生。

任何想法?

+1

到目前为止发布的代码似乎不符合问题描述。 action方法被声明为“private”。这应该永远不会被执行,而是在首次调用时引发EL异常。顺便说一下,你为什么不用#'来使用脸部信息?这种嵌套形式是一种丑陋的方法,只会导致[语法无效的HTML](http://validator.w3.org)。 – BalusC

+0

对不起,我犯了一个错误。该方法是公开的,我只是写错了。我将进行编辑以将其设置为公开。另外,我知道更好,我只是发现这种行为很有趣,我试图了解发生了什么。 – Nacho321

回答

0

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

+0

他不是从嵌套表单内部提交,所以这不太可能是原因。另见我对这个问题的评论。 – BalusC