0

リクエストのパラメータからマネージドBeanのプロパティを設定する正しい(最良の)方法は何ですか?

JSFページのURLは次のようになります。

https://eample.com/app/faces/page.xhtml?ts=2012-01-05T10:00:00.000

以下を使用してパラメーターを読み取ることができることがわかりました。

<h:outputText value="#{param['ts']}" />

しかし、私が本当に行う必要があるのは、この値からBeanのプロパティを設定することです。それで、これをコード化する最良のJSF方法は何であるかというと、次のようなJavaコードを生成するものが得られます。

myBean.setTimestamp(request.getParameter("timestamp"));

どうもありがとう

4

2 に答える 2

1

リクエストスコープを持つJSFマネージドBeanを想定して、マネージドプロパティとして注入します。

import javax.faces.bean.*;

@ManagedBean @RequestScoped
public class ReqBean {
    @ManagedProperty("#{param.ts}") private String ts;

    public String getTs() {
        return ts;
    }

    public void setTs(String ts) {
        this.ts = ts;
    }
}

Beanがより広い範囲にある場合は、プログラムで検索する必要があります。

private String lookUpTs() {
    return FacesContext.getCurrentInstance()
                       .getExternalContext()
                       .getRequestParameterMap()
                       .get("ts");
}

CDI Beanを使用している場合は、他のオプションを検討する必要があります(1つのアプローチについてはここを参照してください)。

于 2013-01-07T12:35:47.670 に答える
0

質問の履歴に基づいて、JSF2を使用しているので、そうする<f:viewParam>必要があります。

<f:metadata>
    <f:viewParam name="ts" value="#{myBean.timestamp}" />
</f:metadata>

それでおしまい。

(など)<f:viewParam>から拡張すると、egとを使用して変換と検証を実行することもできます。UIInput<h:inputText><f:convertDateTime>required="true"

<f:metadata>
    <f:viewParam id="ts" name="ts" value="#{myBean.timestamp}" required="true">
        <f:convertDateTime pattern="yyyy-MM-dd'T'HH:mm:ss.SSS" />
    </f:viewParam>
</f:metadata>
...
<h:message for="ts" />

このように、#{myBean.timestamp}は完全に価値のあるプロパティになることができjava.util.Dateます。変換および検証エラーは、に<h:message>関連付けられて終了し<f:viewParam id>ます。

とは異なり@ManagedProperty、は1つである#{myBean}可能性があることに注意してください@ViewScoped

参照:

于 2013-01-07T12:47:22.563 に答える