1

私はこの見解を持っています:

<h:form id="carlin">
    <h:outputText id="carlinInput" value="#{userBean.model.varAjax}"/>
    <a class="btn" data-toggle="modal" href="#myModal" >Launch Modal</a>
</h:form>

そして、別のフォームを表示するモーダルダイアログがあります。

<h:form>
    <h:inputText value="#{userBean.model.varAjax}"/>
    <h:commandLink action="#{userBean.processPage1()}" value="Ok">
        <f:ajax render=":carlin:carlinInput" />
    </h:commandLink>
</h:form>

に入力した値を設定し、<h:inputText>それをパラメータとして<h:commandLink action="#{userBean.processPage1()}"value ="OK">`に渡す必要があります

これが私のprocessPage1()方法です:

public void processPage1(String zip) {
    this.model.varAjax = zip;
}

私はこれを試しました:

<h:commandLink action="#{userBean.processPage1(userBean.model.varAjax)}" value="OK">

しかし、それは機能しません。ハードコードされた値を渡すと、次のように機能します。

<h:commandLink action="#{userBean.processPage1('teste')}" value="OK">

ただし、ユーザーが入力した内容inputTextをアクションメソッドに渡す必要があります。どうすればこれを達成できますか?

4

1 に答える 1

1

これは正しいアプローチではありません。executeの属性によって、処理/実行する必要のある入力コンポーネントのクライアントIDを指定する必要があります<f:ajax>

<h:form>
    <h:inputText id="varAjax" value="#{userBean.model.varAjax}"/>
    <h:commandLink action="#{userBean.processPage1}" value="Ok">
        <f:ajax execute="varAjax" render=":carlin:carlinInput" />
    </h:commandLink>
</h:form>

このようにして、JSFは送信された値でモデル値を設定します。

public void processPage1() {
    System.out.println(model.getVarAjax()); // Look, JSF has already set it.
}

別の方法は、フォーム全体execute="@form"を処理するを使用することです。これは、標準のajaxifiedボタンで通常必要なものです。

        <f:ajax execute="@form" render=":carlin:carlinInput" />

PrimeFacesやRichFacesなどのコンポーネントライブラリはすでに@formデフォルトのexecute属性を作成しているため、コマンドコンポーネントで明示的に指定する必要はありません。標準<f:ajax>では、つまり、デフォルト@thisでコマンドコンポーネントに設定されますが、これは実際には直感的ではありません。

于 2012-06-06T15:46:52.063 に答える