【问题标题】:How to display FacesMessage for specific commandLink/commandButton/form?如何显示特定 commandLink/commandButton/form 的 FacesMessage?
【发布时间】:2012-02-19 23:58:16
【问题描述】:

单击提交按钮后,我必须进行应用程序/业务级别验证并将错误消息与链接相关联。由于我不能这样做,有什么方法可以将错误消息放在链接顶部。

我对业务逻辑的验证是在 action 方法中

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

非常感谢您的帮助

【问题讨论】:

    标签: validation jsf


    【解决方案1】:

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

    所以,对于下面的链接,

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

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

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

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

    所以,

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

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

    另见:

    【讨论】:

    • 谢谢 Baluc .. 再次感谢您的帮助
    • 不客气。由于您是新来的,因此请不要忘记在回答(最)有助于解决问题时将其标记为已接受。另见meta.stackexchange.com/questions/5234/…
    • 嗨@BalusC &lt;h:form id="testFormId"&gt;&lt;h:commandButton id="testFormId" action="#{testController.myTest()}" value="x" /&gt;&lt;h:message for="testFormId" /&gt;&lt;/h:form&gt; 在我的控制器中我有FacesMessage message = new FacesMessage(); message.setSeverity(FacesMessage.SEVERITY_INFO); message.setSummary("info"); message.setDetail("info"); FacesContext.getCurrentInstance().addMessage(null,message); 但在我的日志文件中我可以看到:facemessage 已添加但可能从未显示...有什么问题?我也试过FacesContext.getCurrentInstance().addMessage("formId:testFormId",message);
    • @Joerg:您的表单和按钮具有相同的 ID。带有null 客户端ID 的消息只会显示在&lt;h:messages/&gt;(或者更好的是&lt;h:messages globalOnly="true" /&gt;
    • @BalusC 如果 FaceMessage 为空,是否有可能签入 JSF?我想要一个错误 div,它只在 FacesMessage 不为空时显示
    【解决方案2】:

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

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

    以及动作方法如下:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-31
      • 2015-08-16
      • 1970-01-01
      • 1970-01-01
      • 2016-08-10
      • 1970-01-01
      • 1970-01-01
      • 2012-03-23
      相关资源
      最近更新 更多