gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 09:34:04 26 4
gpt4 key购买 nike

因此,我尝试在这个问题中实现 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 wayDataModel#getRowData() 完成和 second way通过使用新的 EL 2.2 功能将它直接传递到 action 方法来实现。


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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com