0

次のように、データテーブルがあり、各行にdelete linkコマンドがあります。

<h:dataTable value='#{glbProjectDtoList}' var='projectDto'
    binding='#{projectController.projectDataTable}' styleClass='display'
    id='tblProject' rowClasses='gradeA, gradeA'
    columnClasses='projectTableName, projectTableProgress, projectTableAction'>
    ......
    <h:commandLink
        action="#{projectController.delete(projectDto.projectId)}">
        <img class="btnDeleteProject mr5"
            src="#{request.contextPath}/resources/images/icons/dark/trash.png" />
        <f:ajax execute="@form"
            onevent="function(data) {deleteProjectEventHandler(data);}"
            render=":tblProject" />
    </h:commandLink>
    ......
</h:dataTable>

削除機能は正常に動作しますが、データテーブル全体が再レンダリングされません。アクションがデータテーブルにネストされているためですか、それとも他の理由ですか?


アップデート :

(:) を削除した後、次の例外をスローします。

    javax.faces.FacesException: <f:ajax> contains an unknown id 'tblProject' - cannot locate it in the context of the component j_idt68

(:) がないことを意味し、要素は同じ h:form タグ内にある必要があります。


前もって感謝します。

-牛

4

3 に答える 3

0

これは、コンポーネントの状態が更新されているときにデータテーブルのIDがviewrootに見つからないために発生している可能性があります。

このコンポーネントがviewrootに存在する正確なIDを確認するには、ページソースを確認し、このデータテーブルがレンダリングされるIDを確認してください。

状態が変更されたときにコンポーネントがviewRootに表示されるようにするには、viewSourceにあるIDと同じIDを使用する必要があります。

または、UIComponent.findComponentも役立ち、指定しているIDが正しい場合はUIComponentインスタンスを返し、そうでない場合はnullを返します。

于 2012-12-10T11:58:00.337 に答える
0

:ID の前を削除します。

<f:ajax execute="@form" onevent="function(data) {deleteProjectEventHandler(data);}" render="tblProject"/>

id が区切り文字 (通常は:) で始まる場合、コンポーネントはルート コンポーネントから検索されます。それ以外の場合は、次の から検索されNamingContainerます。

詳細については、javadoc を参照してください: UIComponent.findComponent

于 2012-12-10T08:45:45.920 に答える
0

私は別のアプローチに行き、テーブルの外側に非表示フォームを使用しました。できます。

みんな、ありがとう ;)

于 2012-12-11T03:25:50.020 に答える