0

我正在尝试使用 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} 是迭代器中使用的别名:

4

2 回答 2

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';
}

我不知道这个重定向是否正确,但问题是“消息”参数实际上以前不存在。没有它,它现在应该可以工作了。

于 2013-08-23T18:19:40.733 回答
0

解决了。

问题是JSF给出的自动ID,我使用以下方法解决了这个问题:

<h:form prependId="false">
于 2013-08-29T18:11:37.520 回答