1

私のJavaScript:

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

私のXHTML:

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

私のマネージドBean:

@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 アプレットがあります。しかし、アプレットが新しい値を 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 に答える