【问题标题】:Set message in constructor or @PostConstruct method - possible? [duplicate]在构造函数或@PostConstruct 方法中设置消息 - 可能吗? [复制]
【发布时间】:2011-03-14 09:54:56
【问题描述】:

是否可以在 Managed-Bean 的构造函数或 @PostConstruct 方法中设置消息?

例如:

public class Example {

    @ManagedProperty(value = "#{index.facade}")
    private PersistenceFacade pf;

    public Example() {
    }

    @PostConstruct
    public void doExample() {
        try {
            pf.disconnect();

            ((HttpSession) FacesContext.getCurrentInstance()
                    .getExternalContext().getSession(false)).invalidate();

            setMessage("Successful.");
        } catch (DAOException e) {
            e.printStackTrace();
            setMessage("Error: " + e.toString());
            }
    }

    public void setPf(PersistenceFacade pf) {
        this.pf = pf;
    }

    private void setMessage(String message) {
        FacesMessage fm = new FacesMessage(message);
        FacesContext.getCurrentInstance().addMessage(null, fm);
    }

    public String back() {
        return "/index.xhtml";
    }

example.xhtml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html">
<h:head>
    <title>Example</title>
</h:head>
<h:body>
    <h1>
        <h:outputText value="Example" />
    </h1>
    <h:form>
        <p>
            <h:commandButton id="back" value="Back"
                action="#{example.back}"></h:commandButton>
        </p>
        <h:messages globalOnly="true" />
    </h:form>
</h:body>
</html>

我可以在 Eclipse-Console 中看到该消息,但在页面上看不到,为什么?有什么方法可以告知用户结果吗?

【问题讨论】:

    标签: java jsf jsf-2 facelets


    【解决方案1】:

    尝试在放置 h:messages 之前放置一些访问 jsf beans 属性的 EL

    <h:outputText rendered="#{not empty bean.prop}"  />
    <h:messages id="msg" />
    

    不是这样的

     <h:messages id="msg" />
     <h:outputText rendered="#{not empty bean.prop}"  />
    

    【讨论】:

      【解决方案2】:

      我发现如果我以这种方式添加/更改托管 Bean 和 XHTML 文件,则会显示该消息:

      在 Example.java 中:

      private FacesMessage fm;
      
      public FacesMessage getFm() {
          return fm;
      }
      
      private void setMessage(String message) {
              fm = new FacesMessage(message);
              FacesContext.getCurrentInstance().addMessage(null, fm);
      }
      

      在example.xhtml中:

      <h:messages globalOnly="true" rendered="#{!empty example.fm}" />
      

      【讨论】:

        猜你喜欢
        • 2013-10-21
        • 2017-01-03
        • 2010-09-30
        • 1970-01-01
        • 2013-02-25
        • 2019-10-07
        • 2018-06-30
        • 1970-01-01
        • 2014-08-25
        相关资源
        最近更新 更多