2015-07-04 61 views
0

我在对话框中有一个数据表。p:dataTable找不到记录

当用户单击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> 

为什么对话框数据表不能显示任何东西?

selectedMessagemessages类型的列表,它不为空。

+1

通常的对话框已经画在页面加载,它只是隐藏的,所以你仍然需要AJAX,如果模型的变化更新。向你的commandLink添加一个'update'可能会修复它。 – DavidS

+0

@DavidS这样子? 'update =“PF('dlg1')。show();”' – Sajad

+1

不,更新属性必须与页面上的组件ID匹配。您将需要了解更多信息,因为它是使用AJAX和JSF的重要组成部分。这里是一个例子http://stackoverflow.com/questions/14227681/primefaces-ajax-update-of-panel-from-another-form。 – DavidS

回答

0

你需要在每次点击后更新对话框:

<p:commandLink ... process="@this" update=":msgForm:dlgPanel" onComplete="PF('dlg1').show();"/>