5

私は JSP 2.0 を持っています。その<ui:component>中には<p:dataTable>、 Composite を使用して一部のコンテンツに関する特別な境界線をレンダリングする列があります。<p:dataTabe>ここで、コンテンツにある ajax でレンダリングされた属性を識別する必要があります。

<ui:component>
  <p:dataTable id="dataTable" var="userItem" ... />
    <p:column>

        <my:borderBox id="borderBox">
           <p:commandButton
               action="#{userController.doDelete(userItem.id)}"
               value="delete" 
               update="?????"/>  <!-- How to address the dateTable? -->
        </my:borderBox>

      </p:column>
    </p:dataTable>
 <ui:component>

私のボーダーボックス:

<html xmlns:composite="http://java.sun.com/jsf/composite" ...>
   <composite:interface>
      <composite:attribute name="styleClass" default="" type="java.lang.String"/>
   </composite:interface>

   <composite:implementation>
      <h:panelGroup ...>
         ...
         <composite:insertChildren/>
      </h:panelGroup>
   </composite:implementation>

私の考えは、次のようなものを使用することでした

update=":#{component.namingContainer.parent.namingContainer.clientId}:dateTable

しかしcomponent.namingContainer.parent継ぎ目はヌルに。

<p:commandButton>を次のステートメントに置き換えると、次のようになります。

Parent ClientId 1: #{component}
Parent ClientId 2: #{component.namingContainer}
Parent ClientId 3: #{component.namingContainer.clientId}

Parent ClientId 4: #{component.namingContainer.parent}
Parent ClientId 5: #{component.namingContainer.parent.namingContainer}

私はこの出力を得る:

Parent ClientId 1: javax.faces.component.html.HtmlPanelGroup@3d957419

Parent ClientId 2: javax.faces.component.UINamingContainer@23db9e8f
Parent ClientId 3: main_form:profilTabView:dataTable:0:borderBox

Parent ClientId 4:
Parent ClientId 5: 

何が問題なのかわかりません。リストを特定する私の考えが完全に間違っているか、何か間違いがあるか、またはもっと良い方法がありますか? (しかし、dateTable に固定絶対識別子を使用することはできません!)

バージョン: Glassfish 3.1.2 上の Primeface 3.2、Mojarra 2.1.6

4

1 に答える 1

1

この問題の回避策があります。別の解決策が見つからない場合は、代わりに使用できます。解決策は、jsfとjavascriptを組み合わせたものです。テーブルに対して、ウィジェット(「myTable」など)を定義します。

<p:dataTable id="dataTable" var="userItem" ...  widgetVar="myTable"/>

「myTable」という名前のグローバルJavaScript変数が作成されます。このウィジェットオブジェクトにはIDが含まれています。コマンドボタン(p:commandButtonではなくh:commandButton)の場合、onklickイベントを定義します。

<h:commandButton id="deleteItem" action="#{userController.doDelete(userItem.id)}"
 value="delete" onclick="PrimeFaces.ab({formId:$(this).closest('form').attr('id'),source:this.id,process:'@all',update:myTable.id});return false;" /> 


formId-フォームIDを明示的に入力するか、Jquery関数
の更新を使用します-myTable.idはテーブルID(正確にはdivラッパー)
プロセスです-@ all、@ this、@formなど。

于 2012-08-24T08:13:29.100 に答える