【发布时间】:2015-09-22 05:17:00
【问题描述】:
我在对话框中有一个数据表。
当用户点击Detail链接时,应显示带有数据表的对话框。
代码如下:
<h:form>
<h:dataTable value="#{messageBean.messagesList}" var="msg">
<h:column>
<f:facet name="header">Detail</f:facet>
<p:commandLink action="#{messageBean.fetchSelectedMessage(msg.msgId)}" value="#{msg.summary}" />
</h:column>
</h:dataTable>
</h:form>
这是messageBean.fetchSelectedMessag(...):
@ManagedBean
@SessionScoped
public class MessageBean {
...
private List<Messages> messagesList;
private List<Messages> selectedMessage;
public void fetchSelectedMessage(String msgId) {
String sql = "SELECT * FROM messages WHERE msgId=?";
selectedMessage = jdbcTemplate.query(sql, new Object[]{msgId}, new BeanPropertyRowMapper<Messages>(Messages.class));
System.out.println("fetched selected message== " + selectedMessage); //correct
//open dialog sucucessfully
RequestContext context = RequestContext.getCurrentInstance();
context.execute("PF('dlg1').show();");
}
//getter/setters
然后这个对话框应该会打开(并成功打开,但什么也不显示)
<p:dialog widgetVar="dlg1" modal="true" height="100">
<p:dataTable var="msg1" value="#{messageBean.selectedMessage}">
<p:column headerText="id">
<h:outputText value="#{msg1.msgId}"/>
</p:column>
<p:column headerText="to person">
<h:outputText value="#{msg1.toPerson}"/>
</p:column>
</p:dataTable>
</p:dialog>
为什么对话数据表什么都不能显示?
selectedMessage 是messages 类型的列表,并且不为空。
【问题讨论】:
-
通常对话框在页面加载时已经绘制好了,只是隐藏起来了,所以如果模型发生变化,你仍然需要 AJAX 更新它。将
update添加到您的 commandLink 可能会修复它。 -
@DavidS 喜欢这个?
update="PF('dlg1').show();" -
否,更新属性必须与页面上的组件 ID 匹配。您将希望了解更多有关此内容的信息,因为它是在 JSF 中使用 AJAX 的重要部分。这是一个例子stackoverflow.com/questions/14227681/…。
-
BalusC 在这里写了一个很好的指南stackoverflow.com/questions/8634156/…。
-
@DavidS 是对的。在深入了解之前先了解一些基本的 jsf/ajax 教程
标签: jsf primefaces datatable jsf-2.2