私はその<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.xhtml
SampleClass
rendered
<p:dialog>
NullPointer Exception
sample
SampleClass
getData()
<p:commandLink>
getData()
問題は、メソッドが実行sample
されて SessionMap に挿入された後でも、ポップアップが表示されないこと
です。
がクリックさupdate=:form:dialog
れた後にダイアログを更新していました。<p:commandLink>
しかしrendered
、ダイアログのプロパティが更新されないようです。だから私は見ることができません<p:dialog>
。
何か不足していますか?