如何为特定的commandLink / commandButton / form显示FacesMessage?

时间:2012-01-26 21:40:36

标签: validation jsf

单击“提交”按钮,我必须执行应用程序/业务级别验证,并将错误消息关联到链接。我无法做到这一点,有任何方法可以将错误消息放在链接之上。

我对业务逻辑的验证在于操作方法

FacesMessage message = new FacesMessage();
message.setSeverity(FacesMessage.SEVERITY_ERROR);
message.setSummary("ERROR MESSAGE");
message.setDetail("ERROR MESSAGE");
FacesContext.getCurrentInstance().addMessage("linkId", message);

非常感谢帮助

2 个答案:

答案 0 :(得分:12)

FacesContext#addMessage()的第一个参数必须是客户端ID,而不是组件ID。客户端ID是您在生成的HTML输出中看到的HTML元素的ID(正如您在浏览器中右键单击页面和查看源所见)。对于表单中的JSF输入和命令组件,这通常以表单的ID为前缀。

因此,对于以下链接,

<h:form id="formId">
    ...
    <h:commandLink id="linkId" ... />
    <h:message for="linkId" />
</h:form>

您应该按如下方式添加消息:

FacesContext.getCurrentInstance().addMessage("formId:linkId", message);

但是,正如您在操作方法中所做的那样,显示全局消息的规范方法就是使用<h:messages globalOnly="true" />,您可以使用null客户端ID填充消息。

所以,

<h:form id="formId">
    ...
    <h:commandLink id="linkId" ... />
    <h:messages globalOnly="true" />
</h:form>

FacesContext.getCurrentInstance().addMessage(null, message);

另见:

答案 1 :(得分:0)

您可以将错误消息与链接相关联。为此,请为您的按钮编写一个动作方法,如下所示:

<h:commandButton label="Submit" action="#{actionBean.actionMethod}"/>

动作方法如下:

public String actionMethod(){
  if(error){
     return "error";
  else
     return "index";
}

该方法返回结果。例如,如果发生错误,页面将导航到/error.xhtml。