后执行的方法我有这样的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()发现错误并捕获异常时会发生。
任何想法?
到目前为止发布的代码似乎不符合问题描述。 action方法被声明为“private”。这应该永远不会被执行,而是在首次调用时引发EL异常。顺便说一下,你为什么不用#'来使用脸部信息?这种嵌套形式是一种丑陋的方法,只会导致[语法无效的HTML](http://validator.w3.org)。 –
BalusC
对不起,我犯了一个错误。该方法是公开的,我只是写错了。我将进行编辑以将其设置为公开。另外,我知道更好,我只是发现这种行为很有趣,我试图了解发生了什么。 –
Nacho321