Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 如何在a<;中设置异常消息;h:消息>;?_Jsf_Exception Handling_Message - Fatal编程技术网

Jsf 如何在a<;中设置异常消息;h:消息>;?

Jsf 如何在a<;中设置异常消息;h:消息>;?,jsf,exception-handling,message,Jsf,Exception Handling,Message,我正在尝试在中设置异常消息 以下是相关的视图代码: <h:inputText id="titleId" value="#{bookController.book.title}"/> <h:message for="titleId"/> <h:commandButton value="Create a book" actionListener="#{bookController.doCreateBook}" action

我正在尝试在
中设置异常消息

以下是相关的视图代码:

<h:inputText id="titleId" value="#{bookController.book.title}"/>                        
<h:message for="titleId"/>
<h:commandButton value="Create a book" actionListener="#{bookController.doCreateBook}" action="listBooks"/>
我的支持bean捕获它并设置一条消息:

public void doCreateBook() {
    FacesContext ctx = FacesContext.getCurrentInstance();
    try {
        book = bookEJB.createBook(book);
        bookList = bookEJB.findBooks();
    } catch (CustomException e) {
        ctx.addMessage("titleId", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", e.getMessage()));
    }                               
}
除此之外,当异常发生时,必须在输入文本标记附近显示一条错误消息,但事实并非如此,执行将显示包含书籍列表的页面,并在列表下显示“错误”消息,如下所示:

如何使完整的异常消息显示在输入字段旁边

 ctx.addMessage("titleId", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", e.getMessage()));
您的消息文本有误,您收到的信息相同。将此处的“错误”更改为您想要的


您的消息文本有误,您收到的信息相同。将此处的“错误”更改为您想要的任何内容。

除了ThinkStiple已经回答的错误消息处理之外,您的另一个错误是您正在使用action方法进行验证。这是不对的。您应该改用JSF内置验证工具。每当JSF内置验证失败时,就会调用action方法not,页面也将not导航。最终用户坚持使用当前表单,消息将显示在指定的
标记中

在特定情况下,只需设置
required
属性


如果要自定义默认的必需消息,请使用
requiredMessage
属性



从EJB方法中删除该输入验证。它不属于那里。EJB对此不负责,调用者(在您的情况下,即您的JSF代码)对此负责。

除了ThinkStip已经回答的错误消息处理之外,您的另一个错误是您在操作方法中进行验证。这是不对的。您应该改用JSF内置验证工具。每当JSF内置验证失败时,就会调用action方法not,页面也将not导航。最终用户坚持使用当前表单,消息将显示在指定的
标记中

在特定情况下,只需设置
required
属性


如果要自定义默认的必需消息,请使用
requiredMessage
属性



从EJB方法中删除该输入验证。它不属于那里。EJB对此不负责,调用者(在您的情况下就是您的JSF代码)对此负责。

PUT

PUT

非常感谢。因此,我认为在EJB中管理业务规则作为输入验证不是一个好的做法吗?您可以使用EJB来执行验证,例如检查一个唯一的约束是否没有被违反,但是这应该在一个代码> >验证器< /代码>实现中执行,它应该在失败时抛出一个<代码>验证程序异常>代码>。EJB本身应该只返回true或false之类的内容。另请参见,例如,非常感谢。因此,我认为在EJB中管理业务规则作为输入验证不是一个好的做法吗?您可以使用EJB来执行验证,例如检查一个唯一的约束是否没有被违反,但是这应该在一个代码> >验证器< /代码>实现中执行,它应该在失败时抛出一个<代码>验证程序异常>代码>。EJB本身应该只返回true或false之类的内容。另见例如。
 ctx.addMessage("titleId", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", e.getMessage()));