java - 从 JSF 中的数据表获取选定行数据

标签 java jakarta-ee jsf-2 xhtml ejb

所以,我尝试在这个问题中实现 Anthony/BalusC 的方法: How to get selected row index in JSF datatable?但无济于事。我还浏览了@BalusC的"Using datatables" article (一如既往的精彩)但那是为 JSF1.2 和 2.0 article 编写的并没有真正解决获取选定行数据的问题。当用户单击“添加到我的 Collection 夹”按钮时,所选行不会传递到支持 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>

最佳答案

the 2.0 article doesn't really address getting the selected row data

确实如此。也许您看得不够仔细,但它显示了获取所选行数据的两种方法。看edit()delete()支持 bean 的方法。 first way通过 DataModel#getRowData() 执行和 second way只需使用新的 EL 2.2 功能将其直接传递到操作方法即可做到这一点。


When a user clicks the "Add to my favorites" button, the selected row is not getting passed to the backing bean, the navigation case is not being followed, and the current page is refreshed.

value 时就会发生这种情况<h:dataTable>的与初始请求期间显示的带有表格的页面并不完全相同。如果 bean 是请求范围的和/或 value ,那么就会发生这种情况。 <h:dataTable>的取决于请求参数。将 bean 放置在 View 范围中和/或确保您准备完全相同的 value在 bean 的(后)构造函数中应该修复它。使用 View 范围时,您应该删除 binding <h:dataTable>的到 bean 。


在您的特定情况下,涉及导航到不同的 View ,也许还有另一种更好的方法。具体的功能需求不太清楚。这是一种确认页面吗?那么就使用 GET 吧。或者它只是成功操作后的登陆页面?而是使用 POST-Redirect-GET。有关其他提示,另请参阅 Communication in JSF 2.0 - Processing GET request parameters .

关于java - 从 JSF 中的数据表获取选定行数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11927157/

相关文章:

java - 从http ://localhost in java application获取授权码

java - 如何将文件中的字符写入二维数组?

jakarta-ee - Struts2 + 获取参数值()

java - 如何将bean放入CSS样式按钮

java - JSF2 ApplicationScope bean实例化时间?

java - 为 JMS 2.0 使用者设置 clientID

java - jackson:将 json 反序列化为 java 映射,忽略一些条目

java - 如何使用@WebListener部署java EE监听器

Java-重定向请求

java - session.invalidate() 的奇怪问题