現在、PrimeFaces 4.0 を使用して、dataTable の列のレンダリングされた属性に小さな問題があります。テーブルに常に表示されるべきではない列があるため、そのrender属性を使用し、バッキング Bean から値を取得しました。これは6番目で最後のコラムです。dataTable は、メソッドの最後に表示される ap:dialog 内にあります。
showColumn が false の場合、列は表示されず、その逆も同様であるため、rendered 属性は正しく機能しているように見えますが、問題があります。画像に見られるように、「No records found.」メッセージは最後の列まで届かないようです。レンダリングされた属性を削除しようとするか、(バッキング Bean 値を使用せずに) 手動で true に設定しようとすると、「レコードが見つかりません」というメッセージが表示されます。メッセージは期待どおり最後の列まで到達します。
これらの要素を含むダイアログ/フォーム全体が、ajax リクエスト後に正しく更新されているようです。
バッキング Bean 方式:
public void getStatus(final MyClass foo, boolean showColumn) {
updateForm(foo);
setShowColumn(showColumn);
RequestContext.getCurrentInstance().execute("dailyStatus.show();");
}
xhtml の列部分:
<p:column headerText="Problematic Column" styleClass="tablecenter" rendered="#{myMBean.showColumn}">
<p:commandLink id="view"
action="#{myMBean.doSomething}" update="@form"
rendered="#{obj.status.equals('FAILED')? 'true' : 'false'}"
onclick="spin_start()" oncomplete="spin_stop()">
<h:graphicImage name="images/restart.png" styleClass="icon" />
</p:commandLink>
</p:column>
表に表示されているとおり: