入门从数据表中的JSF所选行的数据(Getting Selected Row Data from D

2019-07-30 23:02发布

所以,我试图实现从安东尼/ BalusC在这个问题的方法: 如何在JSF数据表中获取所选行的索引? 但无济于事。 我还通过@去BalusC的“使用数据表”的文章 (这是美妙一如既往),但是这对JSF1.2书面和2.0的文章并没有真正解决让所选行的数据。 当用户点击“添加到收藏夹”按钮,选定的行不获取传递到后台bean,导航的情况下不被遵守,以及当前页面被刷新。

任何想法,我做错了什么?

这是我支持bean:

    @ManagedBean(name = "selectedBean")
@RequestScoped
public class SelectedBeerBean 
{
    private List<Beer> favoriteBeers;
    private Beer selectedBeer;
    private HtmlDataTable datatableBeers;

    public HtmlDataTable getDatatableBeers() {
        return datatableBeers;
    }

    public void setDatatableBeers(HtmlDataTable datatableBeers) {
        this.datatableBeers = datatableBeers;
    }

    public String addBeer()
    {
        selectedBeer = (Beer) datatableBeers.getRowData();

        return "selectedBeer";
    }

    public List<Beer> getFavoriteBeers() {
        return favoriteBeers;
    }

    public void setFavoriteBeers(List<Beer> favoriteBeers) {
        this.favoriteBeers = favoriteBeers;
    }

    public Beer getSelectedBeer() {
        return selectedBeer;
    }

    public void setSelectedBeer(Beer selectedBeer) {
        this.selectedBeer = selectedBeer;
    }

}

这是我的XHTML页面:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Welcome to Draft Savvy, #{draftSavvyController.name}</title>        
    </h:head>
    <h:form>
    <h:body style="background-image: url(Background-Wood.png); ">
        <h3>You searched for "#{draftSavvyController.searchTerm}"</h3>
        <h4>Here are your beers</h4>

        <h:dataTable binding="#{selectedBean.datatableBeers}" value="#{draftSavvyController.beerList}" var="beer" border="1">
           <h:column>
               <f:facet name="header">
                   <h:outputText value="Logo"/>
               </f:facet>
                   <h:graphicImage url="#{beer.icon}"/>            
           </h:column>
           <h:column>
               <f:facet name="header">
                   <h:outputText value="Beer Name"/>
               </f:facet>
                   <h:outputText value="#{beer.name}"/>
           </h:column>        
           <h:column>
               <f:facet name="header">
                   <h:outputText value="Description"/>
               </f:facet>
                   <h:outputText value="#{beer.description}"/>
           </h:column>
           <h:column>
               <f:facet name="header">
                   <h:outputText value="Beer ID"/>
               </f:facet>
                   <h:outputLabel value="#{beer.id}" />
           </h:column>
           <h:column>
               <f:facet name="header">
                   <h:outputText value="Add To My Favorites"/>
               </f:facet>
               <h:commandButton value="Add Beer" action="#{selectedBean.addBeer}">
                   <f:setPropertyActionListener target="#{selectedBean.selectedBeer}" value="#{beer}" />
               </h:commandButton>            
           </h:column>
         </h:dataTable>

    </h:body>
    </h:form>
</html>

Answer 1:

在2.0的文章并没有真正解决让所选行的数据

它的作用。 也许你不知道的不够紧密,但它表明越来越所选行的数据有两种方式。 看看edit()delete()支持bean的方法。 在第一种方式做它用DataModel#getRowData()和第二种方式仅通过它传递直入行动方法使用新的EL 2.2功能做的。


当用户点击“添加到收藏夹”按钮,选定的行不获取传递到后台bean,导航的情况下不被遵守,以及当前页面被刷新。

当会发生value的的<h:dataTable>不是因为它是其中已经显示与表中的页面的初始请求期间完全相同。 这将反过来发生,如果所述豆是请求范围和/或value的的<h:dataTable>取决于一个请求参数。 配售豆在视图范围和/或确保您准备完全一样的value在bean的(岗位)的构造应该修复它。 当使用视图范围,则应该除去 binding所述的<h:dataTable>到bean。


在您的特定情况下,导航涉及了不同的看法,有可能是另一种更好的,方式。 具体功能要求是不完全清楚。 它是怎样的一个确认页面的? 而是使用GET即可。 或者是它只是一个成功的行动之后,登陆页面? 而是使用POST重定向消息GET。 对于另一个提示,也参见通信在JSF 2.0 -处理GET请求参数 。



文章来源: Getting Selected Row Data from Datatable in JSF