【问题标题】:Problem displaying data from datatable row's current object显示数据表行的当前对象中的数据时出现问题
【发布时间】:2011-06-05 23:03:25
【问题描述】:

我的数据表有问题,我想在选择数据表时显示数据表行的信息,为此我创建了一个名为 currentChangerStatus 的值,我想将其设置为当前选择,这是我的代码:

<p:dataTable id="projets"  var="p" value="#{projet.init()}" rowSelectListener="#{projet.currentChangerStatus(currentChangerStatus)}" selectionMode="single" onRowSelectStart="datecreation">  

                                    <f:facet name="header">  
                                            Listes des projets Gpsi  
                                        </f:facet>  

                                        <p:column>  
                                            <f:facet name="header">  
                                                <h:outputText value="Code" />  
                                            </f:facet>  
                                            <h:outputText value="#{p.projets.codeProjet}" />  
                                        </p:column>  

                                        <p:column>  
                                            <f:facet name="header">  
                                                <h:outputText value="Intitulé" />  
                                            </f:facet>  
                                            <h:outputText value="#{p.projets.libelle}" />  
                                        </p:column>  


                                    </p:dataTable>  

豆子:

 public void setCurrentChangerStatus(ChangerStatus currentChangerStatus)
{
    this.currentChangerStatus=currentChangerStatus;
}
  public ChangerStatus getCurrentChangerStatus()
{
        return currentChangerStatus;
    }

问题是数据表不接受这个表达式:

rowSelectListener="#{projet.currentChangerStatus(currentChangerStatus)}"

【问题讨论】:

  • “请帮忙,因为我很快就需要这个项目!” - 请接受一些答案(见faq)。

标签: jsf datatable primefaces


【解决方案1】:

这是显示数据表行信息的另一种方式。

<p:dataTable>
.....
.....
   <p:column>
    <p:commandLink update="xhtmlElementID" title="View Detail"  >
                     <p:graphicImage value="/images/search.png" />
                   <f:setPropertyActionListener value="#{p}" target="#{project.SomeObject}" />
         </p:commandLink>
</p:column>
</p:dataTable>

这里的 target="#{project.SomeObject}" 是点击命令链接时要更新的数据

【讨论】:

  • 嘿,我通过将 nRowSelectUpdate="xhtmlElementID" 添加到数据表来创建解决方案,谢谢大家的帮助
【解决方案2】:

我认为您以错误的方式使用行选择。属性rowSelectListener 需要指向具有此签名的方法(对于Primefaces showcase):

 public void onRowSelect(SelectEvent event) { ... }

在你的p:dataTable 中你需要这样引用这个方法:

<p:dataTable var="car" value="#{tableBean.cars}" paginator="true" rows="10"  
     selection="#{tableBean.selectedCar}" selectionMode="single"  
     rowSelectListener="#{tableBean.onRowSelect}"

注意监听器方法是如何被引用的。

这样您就可以在tableBean.selectedCar 中获得选定的行对象。

展示中给出了一个完整的例子(上面的链接)。

更新来自您的 cmets:

这就是问题所在:

value="#{projet.init()}"

value 属性需要引用一个列表或包含您的数据的东西,而不是一个方法。例如,如果您有一个类 Project 并希望在表中显示项目列表,则您的支持 bean 必须包含以下内容:

private List<Project> projects;

public List<Project> getProjects() {
   return projects;
}

public void setProjects(List<Project> projects) {
   this.projects = projects;
}

primefaces showcase 它的carSmall 列表中执行相同的操作。

【讨论】:

  • @Matt Handy 在我在这里发布我的问题之前,我已经尝试了 primefaces 的展示案例,当我尝试在我的页面代码上调用 onRowSelect 时,我将 projet 磁带。然后 crtl+space 如果我 delere (event) 只有 #{projet.onRowSelect} 编译器告诉我属性 onRowSelect 是未知的,这给了我 #{projet.onRowSelect(event)}。而且当我尝试通过#{projet.selectedCar}设置当前对象selectedCar时,页面引用geter,当我尝试引用seter方法时,它给了我#{{projet.setSelectedCar(selectedCar)}
  • @cascadox:您确定我们完全按照我的回答使用它吗?您使用哪个 Primefaces 版本?编译器抱怨“属性”这一事实有点令人恼火,因为rowSelectListener 属性必须解析为方法而不是属性。请在您的答案中添加一些代码,以显示您所做的更改。
  • @Matt Handy:是的,我在展示中所做的是我的代码: ...... ...
  • 这里是备份 bean:public void onRowSelect(SelectEvent event){ currentChangerStatus = (ChangerStatus)event.getObject(); FacesMessage msg = new FacesMessage("project Selected", ((ChangerStatus) event.getObject()).getEtats().getLibelleEtat()); FacesContext.getCurrentInstance().addMessage(null, msg); }
  • @Matt Handy:正常情况下,当我选择 i 行时,应用程序应设置当前对象并显示一条消息,其值为 getLibelleEtat() 但它不起作用...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-01
  • 1970-01-01
相关资源
最近更新 更多