2016-08-17 3 views
0

私はparent.xhtmlのページを持っています。ここにはchild.xhtmlページが含まれています。 子ページにはボタンがあり、それをクリックすると親ページでリスナー/アクションイベントをトリガーしたいとします(親のBeanからメソッドを実行したいとしましょう)。PrimeFacesに含まれているページから親ページのイベントをトリガーするにはどうすればよいですか?

編集:他の親/ラッパーでも子ページを再利用できるように、子ページをできるだけ原子単位で作成する必要があります。それは単に親ページになる人が聴くことができるイベントをブロードキャストするだけです。

parent.xhtml:

<ui:include src="/content/childPage.xhtml"></ui:include> 

child.xhtml

<p:commandButton doSomething....> 
</p:commandButton> 

私はあなたのあなたのparent.xhtmlchild.xhtmlからデータ情報を送信するにはJSF 2、

+0

あなたは 'parent.xhtml'から' child.xhtml'またはその他の方法でにいくつかのデータを言わせて送りたいですか?!? –

+0

あなたのインクルードにいくつかの情報を追加し、 'child.xhtml'の構造をちょっと変えることができるので、 –

+0

ちょっと!私は子供から親に送られたい。 child.xhtmlは別のjarファイルにあります。 – optimoose

答えて

2

あなたの2つの「ページ」は、クライアントサイドの1つのhtmlページです。 parent.xhtmlで

<p:commandButton type="button" value="Click me" onclick="$(document).trigger("myevent");" /> 

<script> 
    $(document).on("myevent", rc); 
</script> 

<p:remoteCommand name="rc" update="msgs" actionListener="#{parentViewBean.execute}" /> 
だから、あなたはjQueryのイベントがclient.xhtmlで

の取り扱いとPrimeFaces remoteCommandを組み合わせた非常にシンプルな 'イベント' ベースのソリューションを持つことができます

親は、呼び出すアクションを完全かつ簡単に定義することができます。欠点は、親に 'イベント'ハンドラがない場合、ボタンは何もしないように見えるということです。それが問題であれば、それは解決することができます。

変更client.xhtmlへ:

<p:commandButton type="button" value="Click me" onclick="fireEventIfPresent" /> 

<script> 
function fireEventIfPresent() { 
    if($._data(document, "events")['myevent']) { // check if eventhandler is present 
     $(document).trigger("myevent");   
    } else { 
     alert('No event handler in parent page'); 
    } 
} 
</script> 
+0

downvoteに感謝します。私はいつも私の答え(またはコメント)を読んで、それらを判断する時間を取っている人々に感謝します。技術的に正解であれば、下降音には説明が付いていますが、それを感謝します。そうすれば、私はそれを改善することも、将来の回答のためにそれを学ぶこともできます – Kukeltje

-1

をPrimeFaces 6を使用していますParentManagedBeanを参照してChildManagedBeanManagedPropertyを追加する必要があります。

ChildManagedBean.java

@ManagedProperty(value = "#{parentManagedBean}") 
private ParentManagedBean e; 

child.xhtml

child.xhtmlからこれを見てみましょう

<p:commandButton actionListner="#{childManagedBean.doSomething()}"....> 
</p:commandButton> 

ChildManagedBean.java

public void doSomething(){ 
    Boolean test = Boolean.TRUE; 
    e.methodGetInfof(test); 
} 

それはあなたがあなたのparent.xhtml

parent.xhtml

<ui:include src="/content/childPage.xhtml"> 
    <ui:param name="action" value="executeMethod"/> 
    <ui:param name="bean" value="#{ManagedBean}" /> 
</ui:include> 

にこれを追加し、child.xhtml

child.xhtmlにこれを追加する必要があり、再利用可能なようにするには

<p:commandButton actionListener="#{bean[action]()}"....> 
</p:commandButton> 

あなたを助けた希望。

+0

私は子供のボタンがあります。ボタンをクリックすると、親のイベントがトリガーされます。私は親から子供に何かを送りたくない。 – optimoose

+0

私はママの答え –

+0

をお返事ありがとうございます!他のページでも子ページを再利用できるようにしたい。 – optimoose

関連する問題