1

現在、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>

表に表示されているとおり: ページに表示されているとおり

4

1 に答える 1

1

PrimeFaces 4.0 には、jQuery を使用して問題をハックっぽい修正に頼った「解決策」があります。最近の PrimeFaces バージョンでは、これはすでに修正されています

動的列を表示する必要がある場合は、バッキング Bean でフラグを使用してから、このメソッドを呼び出します。(問題で述べたように、データテーブルのリストは null または空である必要があります)

RequestContext.getCurrentInstance().execute("$('[id=\"myForm:myDataTable\"] tr.ui-widget-content td').attr('colspan', 6);");

これにより、ヘッダー行の後の行にある単一の td の colspan が、最後のヘッダー列に到達するように強制されます。これが、将来この問題に遭遇する他の人に役立つことを願っています!

于 2015-09-01T03:29:23.087 に答える