值没有从datatable传递到对话框

时间:2013-07-25 10:32:03

标签: jsf primefaces

  <p:column>  
    <p:commandButton id="selectButton" update="@(form)" oncomplete="userDialog.show()" icon="ui-icon-search" title="View">  
      <f:setPropertyActionListener value="#{book}" target="#{CreateBookBean.selectedUser}" />  
    </p:commandButton>  
    </p:column>  
  </p:dataTable>  
</p:outputPanel>

<p:dialog header="User Detail" modal="true" widgetVar="userDialog" width="200" height="175">                                                                          
  <h:panelGrid  columns="2" cellpadding="5">
    <h:outputLabel for="fname" value="First Name: " />
    <h:outputText id="fname" value="#{CreateBookBean.selectedUser.fname}" />
    <h:outputLabel for="lname" value="Last Name: " />
    <h:outputText id="lname" value="#{CreateBookBean.selectedUser.lname}" />
    <h:outputLabel for="mobileno" value="mobile no: " />
    <h:outputText id="mobileno" value="#{CreateBookBean.selectedUser.mobileno}" />
  </h:panelGrid>
</p:dialog>

我最近遇到了这个例子。 数据表正在使用我输入的值正确更新。但是,当我想在对话框中显示它时,它不显示任何内容。 我实际上不明白为什么使用value =“#{CreateBookBean.selectedUser.fname}”代替value =“#{CreateBookBean.fname}”。

这是我的java代码

public class CreateBookBean {  

    private Book book = new Book();  
    private List<Book> books = new ArrayList<Book>();  
    private Book selectedUser;
    public String reinit() {  
        book = new Book();  

        return null;
    }

 setters and getters are included here  
}

2 个答案:

答案 0 :(得分:0)

使用您使用的按钮中的更新属性来显示对话框,例如<p:commandButton update="dialogBoxId" . . ./>,以便显示数据表中的项目。

答案 1 :(得分:0)

让我们将这个问题分成两部分。

<强>第一

如果要显示更新的值(例如,使用h:outputText),则需要更新此元素。更新此元素意味着,它将获取它的辅助bean的当前值。 这样做:

<p:commandButton ... update="idToUpdate1, idToUpdate2, ..." >

要获得idToUpdate支票Naming Container in JSF2/PrimeFaces

如果您有许多需要更新的组件,我建议将它们分组为一个NamingContainer(例如p:outputPanel)。因此,您只需更新NamingContainer,而不是每个组件。



第二

#CreateBookBean.selectUser.fname表示:“获取CreateBookBean,获取其属性selectUser并获取selectUser名为fname的属性”。 在这种情况下,您将拥有这些类布局:

public class CreateBookBean {
  private Book selectedUser;
  ....
  public Book getSelectedUser() {
    return this.selectedUser;
  }
}

public class Book {
  private String fname;
  ....
  public String getFname() {
    this.fname;
  }
}

#CreateBookBean.fname表示:“抓取CreateBookBean,抓取它的属性fname”。 在这种情况下,您将拥有此类布局:

public class CreateBookBean {
  private String fname;
  ....
  public String getFname() {
    return this.fname;
  }
}

根据您发布的此代码,我猜CreateBookBean有一个名为selectedUser的属性(代码显示它:target="#{CreateBookBean.selectedUser}"),而selectUser有一个财产fname