JSF アプリケーションのログイン ページを作成しました。ユーザー名とパスワードを URL を介してパラメーターとして渡し、後でそれらを Bean クラスのフィールドとして受け取りたいと考えています。これどうやってするの?
2 に答える
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 を設定します。
まず第一に、ユーザー名とパスワードをクエリ文字列の一部として追加することを考えている場合。それをしないでください。システムを脆弱にしています。
あなたの質問への答えについて:
<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 クラスに存在する必要があります。値は関数の引数に直接マップされます。