如何从JSF bean显示Ajax消息?

时间:2013-08-23 17:06:00

标签: javascript jsf richfaces

我正在尝试使用java函数发出的消息来发出警报。系统就像这样简单:

    public class AdminBean extends AbstractListBean {

    private Collection <Hours> A;
    private ModelDto selectedModel;
    private String message;

public void insert() {

        //some preparations
        setMessage("");

        if ( selectedModel!= null ) {

                try{

                //try insert of selected model
                setMessage("Success");

                }catch (Exception e) {

                    setMessage("Unespected Error");
                }

            }else{
                setMessage("Not available");
            }

        //getHttpServletRequest().setAttribute("message", getMessage());
        //FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(message)); 

    }

}

而且,在客户端,我写了这样的xhtml:

<a4j:commandLink styleClass="inscribirse" rendered="#{model.status eq 'N' and model.styleClass eq 'font-weight:bold;'}">
    <a4j:jsFunction name="okClicked" actionListener="#{AdminBean.insert}" oncomplete="reDirigir(message)">
    <a4j:actionparam name="message" assignTo="#{AdminBean.message}"/>
    </a4j:jsFunction>
   <h:outputText value="Inscribirse" />
   <f:setPropertyActionListener target="#{AdminBean.selectedModel}" value="#{model}" />
</a4j:commandLink>

因此,当单击A4J命令时,“插入”功能运行,我可以看到它正在观看数据库,但是“reDirigir”功能不起作用:

function reDirigir(c){

        alert(c);
        window.location.href='#{facesContext.externalContext.request.contextPath}/StrutsJsfServlet?beanName=menuBean&method=eventos';

        }

我的目的是显示来自bean的消息,然后刷新页面。有什么建议?

非常感谢!

PS:这个xhtml代码在集合A的迭代中,而#{model}是迭代器中使用的别名:

2 个答案:

答案 0 :(得分:1)

<a4j:jsFunction name="okClicked" actionListener="#{AdminBean.insert}" oncomplete="reDirigir(message)">

这不起作用。您将向您的支持bean发送“消息”,但它不会被发回,并且可能会在您的javascript函数中使用。

假设您想要alert(...)消息(在我看来有点难看),最简单的方法是拥有隐藏的输入字段,其值为消息。您的commandLink将重新记录此隐藏字段,以便您可以在通过javascript调用bean之后访问其值。

使用jQuery可能就像$('input#hidden_input_id').val()

一样简单

您的函数reDirigir可能看起来像这样

function reDirigir() {
    alert($('input#hidden_input_id').val());
    window.location.href='#{facesContext.externalContext.request.contextPath}/StrutsJsfServlet?beanName=menuBean&method=eventos';
}

我无法分辨这种重定向是否正确,但问题是“消息”参数实际上以前不存在。没有它,它现在应该正常工作。

答案 1 :(得分:0)

解决。

问题是由JSF提供的自动ID,我使用:

解决了这个问题
<h:form prependId="false">