我的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方法?我做错了什么?
答案 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()