0

私はprimefaces FieldSetコンポーネントを使用しており、フィールドセット内にボタンフィールドが指定されています。コマンド ボタンをクリックすると、ah:selectonemenu & 入力テキストが表示され、さらにクリックすると、h:selectOnemenu &inputtext が非表示になるという要件があります。以下は、表示と非表示を行うために書いたコードです。ショーの部分は正常に動作します。しかし、ボタンをクリックして非表示にしようとすると、機能しません。

xhtml コード

<h:panelGrid id="grid1" columns="3">
    <p:fieldset id="GlobalAdjustment" legend="GlobalAdjustment"  style="font-size:12px !important;width:30%" >
    <h:commandButton  id="globalAdjustID"  image="#{review.imageUrl}" actionListener="#{review.showUpdateList}" />  
    </p:fieldset>

    <h:selectOneMenu id="SelectID"   value="#{review.reviewList}"  rendered="#{demandReview.selectoneRenderer}">
        <f:selectItems id="FilterSelectListID"   value="#{review.reviewListIDs}" style="font-size:12px !important"></f:selectItems>
    </h:selectOneMenu>
    <h:inputText id="fieldUpdateID" required="false" rendered="#{review.inputTextRenderer}"></h:inputText>
</h:panelGrid>

ManagedBean ActionListener メソッド

public void showUpdateList(ActionEvent event)
{
    System.out.println("entering the Action Method:");
    Map<String, Object> idMap = new HashMap<String, Object>() ;
    idMap = event.getComponent().getAttributes();
    String url = (String) idMap.get("image");
    System.out.println("The url is :"+url);
    if(url.equals("/images/add_data_button.png")){
        //upbean.setImageUrl("/images/remove_data_button.png") ;
        imageUrl ="/images/remove_data_button.png" ;
        selectoneRenderer = true;
        inputTextRenderer = true;
    }else
    {
        imageUrl ="/images/add_data_button.png" ;
        selectoneRenderer = false;
        inputTextRenderer = false;
    }
}

フィールドセット内のコマンド ボタンを初めてクリックすると、正常に動作し、selectoneMenu とテキスト ボックスが表示されます。さらにクリックすると、ActionListener が呼び出されません。問題の解決を手伝ってください。

ありがとう

4

2 に答える 2

1

別のアプローチを試すことができます。次のように p:commandButton を update 属性とともに使用します。

<h:panelGrid id="grid1" columns="3">
    <p:fieldset id="GlobalAdjustment" legend="GlobalAdjustment"  style="font-size:12px !important;width:30%" >
    <p:commandButton  id="globalAdjustID"  image="#{review.imageUrl}" actionListener="#{review.showUpdateList}" update="grid1"/>  
    </p:fieldset>

    <h:selectOneMenu id="SelectID"   value="#{review.reviewList}"  rendered="#{demandReview.selectoneRenderer}">
        <f:selectItems id="FilterSelectListID"   value="#{review.reviewListIDs}" style="font-size:12px !important"></f:selectItems>
    </h:selectOneMenu>
    <h:inputText id="fieldUpdateID" required="false" rendered="#{review.inputTextRenderer}"></h:inputText>
</h:panelGrid>

このように部分処理を使用すると、パネルの内部コンポーネントの条件付きレンダリングが AJAX を介して実行されます。

また、サーバーのコンソールをチェックして、表示されなかったメッセージがキューにあるかどうかを確認することをお勧めします。

于 2012-07-17T20:07:49.527 に答える
0

要件はサーバー側の使用を指定していますか? このようなものには、単純な Javascript スクリプトの方が適していると思っていたでしょう。

たとえば、jQuery ライブラリを使用して次のようなことを行います。

<h:commandButton id="xyz" onclick="$('#elementId').toggle();"/>
于 2012-07-17T14:43:29.270 に答える