0

私は以下のコードを持っています:

<h:inputText id="userName" />
...
<h:commandButton actionListener="..." action="...">
<f:param name="userInput" value="user" />
</h:commandButton>

<f:param>基本的に、inputText(クライアントによって送信された)の値を取得し、それをタグの属性に格納したいと思いますvalue。リクエストパラメータからユーザー名にアクセスできるように、これを実行したいと思います。これを行う方法はありますか?Beanを使用して入力値を格納できることはわかっていますが、要求値を要求パラメーターオブジェクトに格納できるかどうか疑問に思っています。

4

2 に答える 2

1

いくつかの方法があります:

  1. リクエスト パラメータ マップから自分で取得します。標準の HTML 仕様に従って、HTML input 要素の name 属性は、HTTP 要求パラメーター名を表します。JSF では、HTML 入力要素の名前はコンポーネントのクライアント ID と同じです。

    したがって、与えられた

    <h:form id="form">
        <h:inputText id="userName" ... />
    

    を生成する<input name="form:userName">場合、次のように送信された値を取得できます

    String userName = context.getExternalContext().getRequestParameterMap().get("form:userName");
    

  2. によって、自分でコンポーネントから取得しますUIInput#getValue()。JSF は、リクエスト値の適用、変換/検証、およびモデル値の更新の手順をすでに実行しています。value入力コンポーネントの属性を Bean プロパティにバインドしないと、コンポーネント自体に固定されます。アクセスするだけです。コンポーネントは、コンポーネント ツリーで利用可能なクライアント ID ごとに表示されます。

    UIInput userNameComponent = context.getViewRoot().findComponent("form:userName");
    String userName = (String) userNameComponent.getValue();
    

  3. 入力コンポーネントをビューにバインドし、UIInput#getValue()アクション メソッドの引数として渡します。

    <h:inputText binding="#{userName}" ... />
    <h:commandButton ... action="#{bean.submit(userName.value)}" />
    

    public void submit(String userName) {
        // ...
    }
    

言うまでもなく、入力値を Bean にバインドするだけの方がはるかにクリーンです。

于 2013-01-17T13:56:59.890 に答える
0

必要ありませんf:param。次のように送信されたテキストにアクセスできます。

FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("generatedParameter");

生成されたパラメーター名はuserName、コンポーネントの名前付けコンテナーの JSF prepand id のため、実際にはあなたの場合ほど単純ではありません。最も簡単な方法は、生成された HTML コードを調べて、入力コンポーネントの名前を確認することです。

于 2013-01-17T11:04:42.370 に答える