0

index.xhtml:

    <f:metadata>
        <f:viewParam id="playernameparam" name="playernameparam" required="true" 
                requiredMessage="Player name required!" 
                value="#{playersBean.playerName}"/>            
        <f:viewParam id="playersurnameparam" name="playersurnameparam" required="true" 
                requiredMessage="Player surname required!" 
                value="#{playersBean.playerSurname}"/> 
    </f:metadata>
    <h:message for="playernameparam" />
    <h:message for="playersurnameparam" />
    <h:head>
        <title></title>
    </h:head>   
    <h:body>        
        <h:form>
            Enter name:<h:inputText value="#{playersBean.playerName}"/><br/>
            Enter surname:<h:inputText value="#{playersBean.playerSurname}"/><br/>
            For validation purpose: <h:inputText id="address" 
                    value="#{playersBean.address}" required="true" 
                    requiredMessage="Kindly fill your address location" /><br/>
            <h:message for="address" style="color:red" /><br/>
            <h:commandButton value="Submit" action="#{playersBean.action()}">
            </h:commandButton>
        </h:form>       
    </h:body>

結果.xhtml:

    <f:metadata>
        <f:viewParam name="playernameparam" value="#{playersBean.playerName}"/>            
        <f:viewParam name="playersurnameparam" value="#{playersBean.playerSurname}"/> 
    </f:metadata>
    <h:head>
        <title></title>
    </h:head>   
    <h:body>        
        You requested name: <h:outputText value="#{playersBean.playerName}"/><br/>
        You requested surname: <h:outputText value="#{playersBean.playerSurname}"/>       
    </h:body>

マネージドBean:

@ViewScoped
@ManagedBean(name = "playersBean")
public class PlayersBean implements Serializable {

    private String playerName;
    private String playerSurname;
    private String address;
    // getters & setters

    public String action() {
        return "results?faces-redirect=true&includeViewParams=true";
    }
}

打った時http://localhost:8080/Leonard/faces/ch2/index.xhtml?playernameparam=FARHAN&playersurnameparam=ANSARI

ここに画像の説明を入力

検証の失敗をトリガーするために、[検証目的] フィールドを空白のままにします。

そしてプレスボタンを押します。

次に、同じフィールドに何かを入力して、もう一度 Enter キーを押します。

それは完全に正常に機能し、ビューパラメーターがあり、リダイレクトされた URL は次のように反映されます。

http://localhost:8080/Leonard/faces/ch2/results.xhtml?playernameparam=FARHAN&playersurnameparam=ANSARI

もちろん豆のままです@ViewScoped

しかし、私の Bean は @RequestScoped であり、これが問題を引き起こしています。検証エラーが発生したときにそれらを失い、その後、POST リクエストでその検証エラーを削除した後に POST を実行すると、次の結果が得られました。

ここに画像の説明を入力

質問は、リクエスト パラメータをどのように保持するかということになります。

4

0 に答える 0