3

PrimeFace DataTable を使用しています。それに ajax rowSelect イベントを追加したいと思います。ただし、行がクリックされると、イベントは発生しません。

私のテーブルは次のようにデカールされています:

<h:from>
....
<h:panelGroup id="forumPanelGroup" layout="block" styleClass="messagesPanel" rendered="#{socialAdvertiserTemplateManagedBean.displayForum}" >
            <p:dataTable 
                id="forumDataTable"
                resizableColumns="true"
                var="post" 
                value="#{forumManagedBean.posts}" 
                scrollable="true"
                scrollHeight="300"
                paginator="true"
                rows="10"
                rowKey="#{post.id_value}"
                emptyMessage="No posts found for the given criteria"
                widgetVar="forumTable"
                selectionMode="single"
                tableStyle="width:auto" 
                paginatorPosition="top">

私はそこに ajax イベントを次のように持っています:

<p:ajax event="rowSelect" update=":mainForm:displayPost" listener="#{forumManagedBean.rowSelect}" />

そして、バッキング Bean には、次の関数があります。

public void rowSelect(SelectEvent selectEvent)
{
    System.out.println("Hello World");
    ForumPost post = (ForumPost) selectEvent.getObject();
    selectedPost = post;
}

イベントがトリガーされない原因となる私の宣言の問題を誰でも見ることができますか? 私も FireBug でそれを見て、行がクリックされた後にこれが送信されるのを見ました:

javax.faces.ViewState 1786545179464296127:-2498355873814808136
javax.faces.behavior.even... 行選択
javax.faces.partial.ajax 真
javax.faces.partial.event rowSelect
javax.faces.partial.execu... mainForm:forumDataTable
javax.faces.partial.rende... mainForm:displayPost
javax.faces.source mainForm:forumDataTable
メインフォーム メインフォーム
mainForm:forumDataTable_i... 1
mainForm:forumDataTable_s... 0,0
mainForm:forumDataTable_s... 1
メインフォーム:j_idt181_active 0
メインフォーム:j_idt70    
メインフォーム:j_idt72    

したがって、rowSelect を送信しているように見えます。しかし、私のサーバー側はそれを拾っていません。

4

5 に答える 5

5

追加する必要があります: selection="#{forumManagedBean.selectedPost}"

セッター内で、選択したオブジェクトを表示できます。

public void setSelectedPost(ForumPost post){
            if(post!=null){
                          System.out.println("Hello World"+post);
                           }
             this.selectedPost=selectedPost;
}

そこにある ajax イベントは次のようになります。

<p:ajax event="rowSelect" update=":mainForm:displayPost"/>
于 2013-09-17T15:54:17.537 に答える
0

セル内の要素のクリックイベントがセル自体に伝播しなかったため、同様の問題がありました。まず、更新要素に関してコンソールにエラーがないかどうかを確認してから、上記の回答に記載されているように選択属性を追加します。それでも解決しない場合は、onclick="this.parentElement.click();" を追加してみてください。tablecell (データテーブル列) 内の一番上の子要素へ。

于 2016-01-26T10:19:46.657 に答える
-1

ここにコピーして貼り付けているときに、フォームでタイプミスをしただけだと思います。

<h:from>

そうしないと、その行でエラーが発生するはずです。フォームに ID を追加して、更新時にアクセスできるようにします。

selectionMode 以外に dataTable に選択を追加すると、問題が解決します。

selectionMode="single" selection="#{forumManagedBean.selectedPost}"
于 2016-08-17T11:54:33.277 に答える