5

JSF アプリケーションのログイン ページを作成しました。ユーザー名とパスワードを URL を介してパラメーターとして渡し、後でそれらを Bean クラスのフィールドとして受け取りたいと考えています。これどうやってするの?

4

2 に答える 2

8

JSF がデフォルトで行う POST パラメーターとして渡す必要があります。JSF を使用したログイン ページの簡単な例をグーグルで検索できますが、URL から要求パラメーターを読み取りたい場合は、次のようにすることができます。

        <a href="name.jsf?id=#{testBean.id}" />

あなたの豆にこのようなものが必要です

@ManagedBean
@RequestScoped
public class TestBean {

  @ManagedProperty(value = "#{param.id}")
  private String id;

  .....
}

同じ結果を得るために xhtml でこれを行うこともできます。JSF 1.2 では viewParam を使用できないため、これは JSF 2.x でも機能します。

<f:metadata>
    <f:viewParam name="id" value="#{testBean.id}" />
</f:metadata>

上記の行は、Bean の作成時にリクエストパラメーター ID から Bean のパラメーター ID を設定します。

于 2013-04-08T05:21:39.960 に答える
2

まず第一に、ユーザー名とパスワードをクエリ文字列の一部として追加することを考えている場合。それをしないでください。システムを脆弱にしています。

あなたの質問への答えについて:

<h:commandLink action="#{ttt.goToViewPage()}" value="View">
    <!-- To access via f:param tag, this does not maps directly to bean. Hence using context fetch the request parameter from request map. -->
    <!-- <f:param name="selectedProfileToView" value="#{profile.id}" /> -->

    <!-- Using this to replace the f:param tag to avoid getting the request object -->
    <f:setPropertyActionListener target="#{ttt.selectedStudentProfile}" value="#{profile.id}" />

</h:commandLink>

f:param (コメントで述べたように)、これは Bean 属性に直接マップされませんが、コンテキストを使用して、requestparametermap から値を参照できるリクエスト オブジェクトを取得する必要があります。

FacesContext context = FacesContext.getCurrentInstance();
Map<String, String> requestMap = context.getExternalContext().getRequestParameterMap();

f:setPropertyActionListener、これは別の属性であり、マネージド Bean の属性に直接マップされます。

<h:commandLink action="#{ttt.goToEditPage(profile.id)}" value="Edit">

ここを見ると、関数の引数について言及しています。同様のシグネチャを持つメソッドがマネージド Bean クラスに存在する必要があります。値は関数の引数に直接マップされます。

于 2013-04-08T04:15:53.563 に答える