0

私はその<h:dataTable>中に を持ってい<p:commandLink>ます。がクリックされたときにデータベースからデータを取得<p:commandLink> し、それを使用しているポップアップ内に表示する必要があります<p:dialog>

<h:form id="form">
<h:dataTable width="80%" value="#{controller.items}" var="a" binding="#{bean.table}"
                rendered="#{not empty controller.items}">
        <h:column>
            <h:outputText value="#{a.date}" />
        </h:column>

        <h:column>
            <h:outputText value="#{a.name}" />
        </h:column>

        <h:column>
            <p:commandLink value="View" action="#{controller.getData()}"
                        update=":form:dialog" oncomplete="w_dialog.show();return false;">

            </p:commandLink>
        </h:column>

        </h:dataTable>

            <p:dialog header="Test" widgetVar="w_dialog" width="600px" height="500px"
                    id="dialog" modal="true" draggable="true" appendToBody="true" rendered="#{sessionScope.sample ne null}">
                    <ui:include src="sample.xhtml"/>
            </p:dialog>

</h:form>   

クリックされた行のデータをキャプチャし、データベースからデータを取得する必要があります。私のBeanとコントローラーのクラスは次のとおりです。

@Named
@SessionScoped
public class Bean implements Serializable
{       
    private HtmlDataTable table;

    // getters and setters                                      

}


@Named
@SessionScoped
public class Controller implements Serializable
{       

    @Inject
    private Bean bean;

    public void getData(){

    bean.getTable().getRowData();
    SampleClass sample=new SampleClass();


    // fetches data from database and populates it within sample instance

    FacesContext context = FacesContext.getCurrentInstance();
    context.getExternalContext().getSessionMap()
                .put("sample", sample);

    }

}

には、 への参照を持つという<p:dialog>ファイルが含まれています。そのため、xhtml ページの読み込みを回避するため にプロパティを使用しました。sample.xhtmlSampleClassrendered<p:dialog>NullPointer ExceptionsampleSampleClassgetData()<p:commandLink>

getData()問題は、メソッドが実行sampleされて SessionMap に挿入された後でも、ポップアップが表示されないこと です。

がクリックさupdate=:form:dialogれた後にダイアログを更新していました。<p:commandLink>しかしrendered、ダイアログのプロパティが更新されないようです。だから私は見ることができません<p:dialog>

何か不足していますか?

4

1 に答える 1

2

存在しないコンポーネントを更新することはできません。rendered属性は、可視性だけでなく、コンポーネントが DOM ツリーに表示されるかどうかを決定します。false の場合、このコンポーネントは JSF で用語の再レンダリング/更新に使用できないことを意味します。

そのための標準的な解決策は、コンポーネントをコンテナー要素にラップし、代わりに更新することです (ちなみに、getterアクション目的でメソッドを使用しないことをお勧めします)。

<h:panelGroup id="parentPanel">
    <p:dialog header="Test" widgetVar="w_dialog" width="600px" height="500px"
        id="dialog" modal="true" draggable="true" 
        appendToBody="true" rendered="#{sessionScope.sample ne null}">
        <ui:include src="sample.xhtml"/>
    </p:dialog>
</h:panelGroup>

<p:commandLink value="View" action="#{controller.showData()}"
                        update=":form:parentPanel" />
于 2013-10-11T12:56:21.747 に答える