1

我的 JavaScript:

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

我的 XHTML:

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

我的托管豆:

@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";
    }
}

场景:

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

4

2 回答 2

3

valueChangeListener不是客户端侦听器。它是一个在提交表单时运行的服务器端监听器。因此,您还需要提交表单。

把它包装成一个表格

<h:form id="form">

并提交如下

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

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

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

也可以看看:


与具体问题无关,有更清洁的方法可以实现这一目标。看看 PrimeFaces<p:remoteCommand>和 OmniFaces <o:commandScript>

于 2013-09-16T20:23:09.633 回答
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()
于 2013-09-16T20:22:29.323 回答