0

こんにちは、私はJSFを初めて使用し、JSFの問題で立ち往生しています。JSFページにコンテンツを動的に追加したいのですが、何らかのイベントの後にページに追加する必要のあるファセットが1つあることが必要です。

私のページには

2つのフィールド「ユーザー名」と「回答」
および
2つのボタン「ログイン」と「パスワードの回復」

フェイスレットには

フィールドとボタンだけ

このページを実行すると、ページのコンテンツ(上記)のみが表示され
、ユーザーがボタン'recover password'を押すと、ボタンを押した後、同じページのページのコンポーネントの下にフェイスレットが表示されるようになります。フェイスレット。
しかし、コードを実行すると、2番目のファセットを動的に追加するロジックを配置していないため、両方が表示されます。
ここに私のコードのパッチを以下に示します

 <h:inputText id="txtLogin" styleClass="textEntry" required="true" requiredMessage="Username is required."> 
                    </h:inputText>
<h:inputText id="answer" styleClass="textEntry" autocomplete="off" required="true" requiredMessage="Answer is required."></h:inputText>
                                    <h:commandButton id="btnSave" value="Save" styleClass="formbutton" onclick="btnSave_Click" />
                    <h:commandButton id="btnRecover" value="Recover" styleClass="formbutton" onclick="btnRecover_Click"/>

このbtnRecover_clickクリックすると、このフェイスレットが含まれるか、このコードが実行されます。

<div class="divPadding">
            <ui:include id="passrecov" src="ucPasswordRecovery.xhtml" rendered="false"/>
        </div>

これはJSFで行う必要があり、JavaScriptでは行いたくないことを覚えておいてください。
ありがとう

4

1 に答える 1

2

1つの列を使用してサンプルを投稿します。別のUIコンテナを使用できることを忘れないでください。

<h:form>
    <h:panelGrid id="login">
        <h:panelGrid>
            <h:inputText id="txtLogin" styleClass="textEntry" required="true"
                requiredMessage="Username is required."> 
            </h:inputText>
            <h:inputText id="answer" styleClass="textEntry" autocomplete="off"
                required="true" requiredMessage="Answer is required.">
            </h:inputText>
            <h:commandButton id="btnSave" value="Save" styleClass="formbutton"
                onclick="btnSave_Click" />
            <h:commandButton id="btnRecover" value="Recover" styleClass="formbutton"
                action="#{loginBean.showPassRecovery}" />
        </h:panelGrid>
    </h:panelGrid>

    <h:panelGrid id="passRecovery">
        <h:panelGrid rendered="#{not loginBean.loginEnabled}">
        <ui:include id="passrecov" src="ucPasswordRecovery.xhtml" />
        </h:panelGrid>
    </h:panelGrid>
</h:form>

そしてあなたのマネージドBean:

@ManagedBean
@ViewScoped
public class LoginBean {
    private boolean loginEnabled;

    public LoginBean() {
        loginEnabled = true;
    }

    //getters and setters...

    //this method will return void, so the page will be refreshed with the new
    //loginEnabled value. this time the components inside "login" panelGrid won't be rendered
    //but "passRecovery" panelGrid components will.
    public void showPassRecovery() {
        loginEnabled = false;
    }
}
于 2012-08-03T07:08:35.243 に答える