0

私は JSF 2.0 と primefaces 3.3 を使用しています。メニュー項目のオンクリックでツールバーを非表示/表示したい。

詳細はこちらです。

<p:menubar autoSubmenuDisplay="true" style="width:99%">
                    <p:submenu label="Projects">
                        <p:menuitem id="m11" value="Select Product" actionListener="#{menuBean.renderTool}" update="t1" />
                        <p:menuitem id="m12" value="Select Project" />
                        <p:menuitem id="m13" value="Select Contract" />
                    </p:submenu>
                    <p:menuitem id="m2" value="Global" />

                    <p:menuitem id="m7" value="Exit" />
                </p:menubar>

                <p:toolbar id="t1" rendered="#{menuBean.renderToolbar}">
                    <p:toolbarGroup align="left" style="height:20px;">
                        <h:outputText value="Projects " />
                        <h:outputText value=" - select Product" />
                    </p:toolbarGroup>
                </p:toolbar>

ManagedBean

private boolean renderToolbar = false;
//getters and setters
public void renderTool(ActionEvent actionEvent){
        System.out.println("inside renderTool method...");
        renderToolbar = true;
    }

actionListener メソッドは実行されていますが、ツールバーの更新またはレンダリングは行われていません。

4

3 に答える 3

2

あなたが提供した情報はあまりありません。

onclickただし、これを行う 1 つの方法は、イベント ハンドラーで Javascript を使用することです。このように(テストされていないコード):

<p:toolbar id="toolbarID" />
<p:menu>
    <p:menuitem onclick="$('#toolbarID').toggle();" />
</p:menu>    

primefaces にはすでに jquery が含まれていると思うので、すぐに jquery セレクターを使用できるはずです。

于 2012-08-29T09:29:56.063 に答える
2

Beanにブール変数を追加します

boolean someBoolean; //+ getter/setter

そしてあなたのrenderToolbarメソッドの中に追加します

someBoolean = !someBoolean; // toggle the disaplay on and off

xhtmlの変更で

<p:toolbar id="t1" rendered="#{menuBean.renderToolbar}">

の中へ

<h:panelGroup id="t1">
    <p:toolbar rendered="#{menuBean.someBoolean}">
.
.
.
</h:panelGroup>
于 2012-08-29T09:51:43.307 に答える
1

ダニエルが提供したソリューションは、バッキング Bean を使用して機能します。ただし、一部の要素の表示/表示がデータに依存せず、クライアント側のものまたは単純なユーザー制御要素である場合は、バッキング Bean を使用しないことをお勧めします。クライアント側のものにバッキング Bean を使用すると、遅延が発生するか、通常のユーザーが言うように、「遅い」です。

代わりに、Jens が提案したように JavaScript などのクライアント側のものを使用してください。PrimeFaces を使用しているため、jQuery を利用できます。toggle()jQuery の,show()およびhide()関数を示す簡単な例:

<h:form>
    <p:menubar>
        <p:menuitem value="Toggle" onclick="$(&quot;[id='t1']&quot;).toggle()" />
        <p:menuitem value="Show" onclick="$(&quot;[id='t1']&quot;).show()" />
        <p:menuitem value="Hide" onclick="$(&quot;[id='t1']&quot;).hide()" />
    </p:menubar>
</h:form>

<p:toolbar id="t1" />

p:toolbarフォームなどのコンテナに住んでいる場合、クライアント側の ID にはフォームの ID がプレフィックスとして付けられることに注意してください。

于 2012-08-29T21:47:02.173 に答える