Erste Ausgewählte Zeile Daten aus Datatable in JSF
So, ich habe versucht, die Methoden implementieren, die von Anthony/BalusC in dieser Frage: How to get selected row index in JSF datatable? aber ohne Erfolg. Ich ging auch durch @BalusC ist "Mit datatables" Artikel (die ist wunderbar, wie immer), aber das war geschrieben für JSF1.2 und die 2.0-Artikel hat auch nicht wirklich immer der gewählten Zeile Daten. Wenn ein Benutzer klickt auf den "Hinzufügen zu " meine Favoriten" - Schaltfläche, dass die ausgewählte Zeile wird nicht immer an die backing bean, die navigation Fall nicht gefolgt wird, und die aktuelle Seite aktualisiert wird.
Irgendwelche Ideen, was mache ich hier falsch?
Hier ist meine backing-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;
}
}
Hier ist meine xhtml-Seite:
<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>
InformationsquelleAutor airowe | 2012-08-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Tut es. Vielleicht sind Sie nicht auf der Suche eng genug, aber es zeigt zwei Wege, um die ausgewählte Zeile Daten. Blick auf die
edit()
unddelete()
Methoden der backing-bean. Die ersten Weise macht es vonDataModel#getRowData()
und die zweite Möglichkeit tut es, indem Sie einfach vorbeikommen, es gerade in die action-Methode mit dem neuen EL 2.2 feature.Passieren wird, wenn die
value
des<h:dataTable>
ist nicht genau das gleiche, wie es war, während die ursprüngliche Anforderung, wobei die Seite mit der Tabelle wird angezeigt. Das wiederum wird passieren, wenn die Bohne request-scoped und/oder dievalue
des<h:dataTable>
hängt davon ab, einem request-parameter. Die Platzierung der bean im view-Bereich und/oder um sicherzustellen, dass Sie bereiten Sie genau den gleichenvalue
in der (post -) Konstruktor der bean-Problem beheben sollte. Bei Verwendung des view-Bereichs sollten Sie entfernen diebinding
des<h:dataTable>
die Bohne.In Ihrem Fall, mit navigation zu einer anderen Ansicht beteiligt ist, gibt es vielleicht eine andere, bessere, Weg. Die konkrete funktionale Anforderung ist nicht genau klar. Ist es eine Art Bestätigung Seite? Verwenden Sie stattdessen BEKOMMEN dann. Oder ist es einfach nur eine landing page nach einer erfolgreichen Aktion? Verwenden Sie lieber den POST-Redirect-GET. Für weitere Hinweise, siehe auch Kommunikation in JSF 2.0 - Processing GET-request-Parameter.
BalusC, seit ich begann, diese Warnungen, ich habe nicht in der Lage zu halten Geltungsbereich von Seite zu Seite, unabhängig von dem, was meine Bohnen sind beschränkt. "WARNING: Multiple [2] JMX MBeanServer instances exist, werden wir die server auf index [0] : [com.sun.enterprise.v3.admin.DynamicInterceptor@a40f0e]. WARNUNG: die JMX-MBeanServer im Einsatz: [com.sun.enterprise.v3.admin.DynamicInterceptor@a40f0e] von index [0] WARNUNG: die JMX-MBeanServer im Einsatz: [com.sun.jmx.mbeanserver.JmxMBeanServer@1bff5c9] index [1]" Könnte das die Ursache meiner Probleme?
Ich werde eine neue Frage hier und nimm deine ursprüngliche Antwort. Wenn Sie können, sorgen weitere Erkenntnisse im Zusammenhang mit dieser Frage, bitte nicht. Nochmals vielen Dank!
InformationsquelleAutor BalusC