【问题标题】:Error handling between button and bean method按钮和bean方法之间的错误处理
【发布时间】:2013-08-20 15:21:01
【问题描述】:

我有一个调用名为 generateLicense 的 bean 方法的 jsf 按钮。这个bean方法返回一个字符串来执行重定向,像这样

"/licenseGenerated.xhtml?faces-redirect=true"

这个方法应该根据用户的输入做几个后端调用。现在,这意味着我必须添加一些错误处理。这是我需要的行为。

用户访问应用程序并位于 main.xhtml 页面中。用户输入值并单击按钮。如果整个过程正常工作,那么用户应该被重定向到 /licenseGenerated.xhtml 页面。否则,如果发生错误,我不需要重定向。我需要的是在 main.xhtml 页面上呈现一个包含错误消息的 jsf 组件。

那么,generateLicense方法在出错的情况下应该返回什么,按钮的jsf代码又会是怎样的呢?

感谢您的帮助!

-编辑-

在 bean 的方法执行期间会检测到错误。这是基于来自休息服务的响应。简单地说,该服务有两种可能的结果。 200(OK),在这种情况下,需要重定向,或者 400(NOT FOUND),以防用户输入错误。所以,java 方法看起来像这样:

public String generateLicenseFile(){
   String response = ""; 
   ... // all the back-end computations
   if(response == "200"){
       return "/licenseGenerated.xhtml?faces-redirect=true";
   }else{
       //ERROR HANDLING. 
   }
}

这是按钮的当前代码。

<h:commandButton value="Generate License File" action="#{agreement.generateLicenseFile}" /> 

【问题讨论】:

  • 究竟是什么,你所说的“错误”? JSF 验证错误,例如 required="true"?这会很奇怪,因为默认情况下 JSF 操作不会对转换/验证错误执行,因此您根本不必担心这一点。
  • 对不起,我没有详细说明。我将在帖子中添加更多信息并进行编辑。谢谢!

标签: jsf jsf-2


【解决方案1】:

只需添加人脸消息并返回null

} else {
    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(
        FacesMessage.SEVERITY_ERROR, "Sorry, generating license file has failed. Please try again later.", null));
    return null;
}

FacesContext#addMessage()null 客户端 ID 的调用将使其成为所谓的全局消息,您可以使用 &lt;h:messages&gt; 将其过滤掉,如下所示:

<h:messages globalOnly="true" />

返回null 将使其返回到调用此操作的同一视图。


与具体问题无关if (response == "200") 并没有像你想象的那样做。我建议多花一点时间学习基本的 Java。

【讨论】:

  • 谢谢!代码本身要复杂得多,所以我试图给出一个非常非常笼统的想法,说明它应该做什么。我仍然感谢您的帮助和关心。
  • 不客气。通用与否,将字符串值与== 进行比较仍然是根本错误的。
  • 知道了。另外,最后一件事。这个解决方案完全按照你说的做,但是如果出错,我必须渲染一个显示错误消息的组件。我想我可以使用 valueListener,所以我也会尝试一下。谢谢!
  • 只需使用&lt;h:messages&gt; 作为回答。有消息时会显示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
  • 2014-06-10
  • 2015-11-08
  • 2013-02-23
相关资源
最近更新 更多