Установить сообщение в конструкторе или методе @PostConstruct - возможно? - PullRequest
1 голос
/ 14 марта 2011

возможно ли установить сообщение в конструкторе или методе @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, но не на странице, почему?Есть ли способ сообщить пользователю о результате?

Ответы [ 2 ]

2 голосов
/ 03 января 2012

попробуйте добавить некоторые EL, которые обращаются к свойствам jsf-бинов, перед тем как поместить h: messages

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

и не так

 <h:messages id="msg" />
 <h:outputText rendered="#{not empty bean.prop}"  />
0 голосов
/ 19 марта 2011

Я обнаружил, что сообщение будет показано, если я добавлю / изменим управляемый компонент и XHTML-файл следующим образом:

В примере. 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}" />
...