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()));