0

次のページがあります。

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"        
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:p="http://primefaces.org/ui"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:ui="http://java.sun.com/jsf/facelets">



<h:head>
    <title>Fire - Registration</title>
</h:head>

<h:body>

    <f:view>
        <f:event type="preRenderView" listener="#{confirmPasswordResetBean.bindSessionKey()}"/>
    </f:view>

    <p:growl id="growl" showDetail="true" life="5000" />

    <h:form>

        <p:panel header="Select your new password">

            <h:panelGrid columns="2" cellpadding="5">

                <p:outputLabel for="newPassword" value="Type your new password"/>
                <p:password id="newPassword" 
                            value="#{confirmPasswordResetBean.firstPassword}"
                            feedback="true"/>

                <p:outputLabel for="retypedPassword" value="Retype your password"/>
                <p:password id="retypedPassword" 
                            value="#{confirmPasswordResetBean.secondPassword}"/>

            </h:panelGrid>

            <p:commandButton id="confirmButton" 
                             value="reset" 
                             action="#{confirmPasswordResetBean.doResetPassword()}"
                             update=":growl"/>

        </p:panel>       

    </h:form>

</h:body>

上記で使用されているバッキング Bean は RequestScoped であり、ページ自体は 1 つのパラメーター (sessionKey) を取ります...私がやりたいことは: 1. sessionKey をバッキング Bean の変数にバインドします。これは簡単です。2. クライアントが commandButton を押したときに、同じ Bean で専用ロジックを実行するときに、sessionKey のバインドされた値を使用します。

問題は、ボタンを押すと新しいリクエストが開始され、現在の Bean (バインドされた値を持つ) と外部ページ コンテキストの両方が無効になることです...したがって、いずれかの Bean から sessionKey を取得する手段がすべて失われますまたはページパラメータ...どうすればこれを解決できますか? 私はWebプログラミングとJSFの両方に比較的慣れていないので、これに明らかな答えがある場合はご容赦ください。

4

1 に答える 1

2

Beanをビュースコープに配置して、同じビューを操作している間はBeanが存続するようにするか、リクエストパラメータ<f:param>を後続のリクエストに渡します。

<p:commandButton ...>
    <f:param name="sessionKey" value="#{param.sessionKey}" />
</p:commandButton>

ちなみに、<f:viewParam>リクエストパラメータをBeanに直接バインドするために使用したほうがよいでしょう。

<f:metadata>
    <f:viewParam name="sessionKey" value="#{bean.sessionKey}" />
</f:metadata>

参照:

于 2012-10-25T02:28:04.577 に答える