在h上创建valueChangeListener:inputHidden触发ManagedBean方法

时间:2013-09-15 18:24:54

标签: jsf-2

我的JavaScript:

function setJson(value) {
        document.getElementById("json").value = value;
    }

我的XHTML:

<h:inputHidden id="json" value="#{indexManaged.json}" valueChangeListener="#{indexManaged.goTo('datatable')}" />

我的ManagedBean:

@ManagedBean
@ViewScoped
public class IndexManaged implements Serializable {

    private String json;
    public String getJson() { return json; }
    public void setJson(String json) { this.json = json; }

    public String goTo(String page) {
        Flash flash = FacesContext.getCurrentInstance().getExternalContext().getFlash();
        flash.put("json", json);
        return page + "?faces-redirect=true";
    }
}

情景:

我有一个Java Applet,它触发函数setJson(value)。但是当applet为我的inputHidden设置一个新值时,是不是使用了valueChangeListener来触发我的ManagedBean方法?我做错了什么?

2 个答案:

答案 0 :(得分:3)

valueChangeListener不是客户端侦听器。它是一个服务器端侦听器,在提交表单时运行。所以,你也需要提交表格。

以表格形式包装

<h:form id="form">

并按如下方式提交

document.getElementById("form").submit();

不要忘记相应地修复隐藏输入的客户端ID:

document.getElementById("form:json").value = value;

另见:


对于具体问题,

无关,有更简洁的方法来实现这一目标。看看PrimeFaces <p:remoteCommand>和OmniFaces <o:commandScript>

答案 1 :(得分:0)

不确定<h:inputHidden

但你可以使用以下内容:

<h:inputText id="json" value="#{indexManaged.json}" style="display:none">
    <f:ajax listener="#{myBean.myListener}"/>
</h:inputText>

并使用jquery触发它:

$("#json").change();// instead of `json` you might be needed to provide 
  //full id like this,  $("#myform\\:json").change()