1

しばらくの間、私は Java ベースの Web プロジェクトに取り組んでおり、この Web サイトが非常に役立つことが何度もありました。
だから、「私自身の問題がいくつかあります - 助けていただければ幸いです!

わかりましたので、ここにあります-
メッセージのリストをレンダリングしようとしています。各メッセージは、メッセージのタイトルとメッセージの本文で構成されています。私が取り組んでいるトリックは、タイトル (a4j:commandLink) がクリックされていない限り、メッセージ本文を非表示にすることです。タイトルをクリックすると、本文が表示されます。もう一度クリックすると、非表示になります。などなど。
JSF側で行ったことは次のとおりです(簡単にするために一部を省略しています)。

<a4j:repeat var="msg" value="#{ForumRenderJSF.messages}">
    <a4j:region id="msgAjaxRegion" renderRegionOnly="true">
    <a4j:outputPanel id="msgPanel" ajaxRendered="true">
    <rich:panel style="width: 100%; border: 0">
    <a4j:form id="msgForm">

        <!--
         The message's title.
         Each click results in either the revealing or hiding of the message's body.
         -->

        <a4j:commandLink value="#{msg.title}" action="#{ForumRenderAssistJSF.reevaluateRender}"/>
        <h:outputText value="  By: <i>#{msg.userNick}</i>,   #{msg.timestamp}" escape="false"/>

        <!--
         The message's body.
         -->

        <!-- A (textual) flag, indicating whether the body should be rendered. -->
        <h:inputText id="renderBodyFlag"/>

        <br/>
        <!-- The body. -->
        <a4j:outputPanel rendered="#{rich:findComponent('renderBodyFlag').value == true}">
            <h:outputText value="#{msg.body}"/>
        </a4j:outputPanel>

    </a4j:form>
    </rich:panel>
    </a4j:outputPanel> <!-- msgPanel -->
    </a4j:region>

</a4j:repeat>

1. ダミーの「 renderFlag
」フィールド (最終的には非表示にする必要があります)。この値は、ボディをレンダリングする必要があるかどうかを示します。
2. レンダリング支援用のバッキング Bean (ForumRenderAssistJSF)。目標は、適切な renderFlag の値を「true」から「false」に、またはその逆に反転することです。
3. ForumRenderAssistJSF.reevaluateRender() のリクエストを発行するときに各メッセージを分離する a4j:region。これにより、Bean は正しい「renderFlag」フィールドを見つけることができます。

豆に関しては:

public class ForumRenderAssistJSF {
public void reevaluateRender()
    {
        FacesContext    context = FacesContext.getCurrentInstance();
        UIViewRoot      root = context.getViewRoot();
        UIComponent     renderFlagComp = (new UIComponentLookup()).lookup(root, compLookup); // My recursive search
        String          renderFlagVal = (String) ((HtmlInputText)renderFlagComp).getValue();

        if (!renderFlagVal.equals("true"))
        {
            ((HtmlInputText)renderFlagComp).setValue("true");
        }
        else
        {
            ((HtmlInputText)renderFlagComp).setValue("false");
        }
    }
}

そして問題は次のとおりです:
このトリックは実際に機能しますが、リストの最初のメッセージに対してのみです! それらの残りについては、サーバーが適切なrenderFlag入力テキストコンポーネントに到達できることがわかります(クライアントで値を挿入することによってテストされます)が、何らかの理由で、クライアントはAJAX応答時に常に空白(コンテンツなし)をレンダリングします!

Richfaces のチュートリアルとマニュアルを深く掘り下げてみましたが、すべてが本来あるべき状態にあるように思えます。それで、私はここでちょっと迷ってしまいました。私が言ったように、あなたの助けに深く感謝します!

ありがとう!

4

1 に答える 1

0

rich:simpleTogglePanelを使用してみましたか? 必要なすべての機能を提供しているようです。

于 2010-09-20T08:37:36.847 に答える