h:commandLink nicht arbeiten im inneren dataTable
In meiner JSF-Datei habe ich unten am start.
<h:form><h:commandLink value="Create New Staff Account" action="adminCreateStaffMember"/></h:form>
.
Durch die Nutzung dieser, wenn ich auf Create New Staff Account
bekomme ich weitergeleitet zu der Seite wo ich das Formular auf neues Konto erstellen.
ABER, Wenn ich das selbe von innen dataTable
, KEINE AKTION genommen wird. Ich bin immer noch auf der gleichen Seite 🙁
<h:dataTable var="c" value="#{newStaffMemberServiceBean.newStaffMemberDataBeanList}"
styleClass="order-table"
headerClass="order-table-header"
rowClasses="order-table-odd-row,order-table-even-row"
border="1" id="staffListDataTable" width="100%">
<h:column>
<f:facet name="header">
Staff Member Name
</f:facet>
<h:form><h:commandLink value="Create New Staff Account" action="adminCreateStaffMember"/></h:form>
</h:column>
</h:dataTable>
Eigentlich das, was ich wollte, zu drucken die details der jeweiligen Mitarbeiter, wo ich wäre mit f:setPropertyActionListener
. Aber wie oben funktioniert nicht, ich geh nicht vor.
Bitte schlagen Sie mich, wohin ich gehe falsch.
Update 1
Meine newStaffMemberServiceBean
ist in RequestScoped
@ManagedBean(name = "newStaffMemberServiceBean")
@RequestScoped
public class NewStaffMemberServiceBean {
//some code
}
Update 2
HTML Erzeugt werden, wie unten
Außerhalb der dataTable
<div align="right">
<form id="j_idt35" name="j_idt35" method="post" action="/adminManageStaffMember" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="j_idt35" value="j_idt35" />
<a href="#" onclick="mojarra.jsfcljs(document.getElementById('j_idt35'),{'j_idt35:j_idt36':'j_idt35:j_idt36'},'');return false">Create New Staff Account</a><input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="2664682277023387375:-3250423983171933030" autocomplete="off" />
</form>
Innen dataTable
<form id="staffListDataTable:0:j_idt43" name="staffListDataTable:0:j_idt43" method="post" action="/adminManageStaffMember" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="staffListDataTable:0:j_idt43" value="staffListDataTable:0:j_idt43" />
<a href="#" onclick="mojarra.jsfcljs(document.getElementById('staffListDataTable:0:j_idt43'),{'staffListDataTable:0:j_idt43:j_idt45':'staffListDataTable:0:j_idt43:j_idt45'},'');return false">Create New Staff Account</a><input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="2664682277023387375:-3250423983171933030" autocomplete="off" />
</form>
- Dies könnte Ihnen helfen, stackoverflow.com/questions/8034428/...
- Nach dem Wechsel zum
ViewScope
gleiche Fehlermeldung...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde vorschlagen, ein paar änderungen für Ihre original-code. Erste, nicht verwenden
h:form
für jede IhrercommandLink
, stattdessen verwenden Sie eine form für IhredataTable
. Zweitens, dieaction
erhalten nur dann ausgeführt, wenn Sie findet die Komponente, die der Auslöser für die aciton. Wenn Sie eine Anfrage scoped-Liste für Ihredatatable
dann, dass die Liste nicht da sein, wenn die Ansicht wiederhergestellt oder möglicherweise nicht mit dem original eine, die verwendet wurde, um die Ansicht zu erstellen. Sie müssen möglicherweise ändern Sie die managed bean aus dem request-scope zur Ansicht scope oder höher.Dritten, als Anregung, die Sie verwenden können, h:outputLink oder h:link statt der commandLink und bieten die f:param, um dies zu vereinfachen, in dem Fall brauchen Sie nicht, die form auch.
outputLink
ich bin wieder Regie zu anderen Seite... finger gekreuzt, um get die Id an eine andere Seite...String value = FacesContext.getCurrentInstance().getExternalContext() .getRequestParameterMap().get(key);
zu bekommen, dass der parameter-Wert. Ihre original geschrieben code nicht erzählen uns etwas über das, was Sie eigentlich suchen, versuchen Sie es aktualisieren und angeben, welche sind die Seiten, die Sie sprechen und welche sind die managed beans, die Sie verwenden, und was alle Parameter, die Sie suchenIst Ihre Tabelle wird umhüllt von einer anderen form ?
wenn das der Fall ist, und du hast die form in form...
entfernen Sie die form-tags umschließt, die
<h:commandLink value="Create New Staff Account" action="adminCreateStaffMember"/>
sowas
h:commandButton
...Ich denke, Ihr commandLink action-Methode ist falsch eingestellt. Sie haben diesen code:
Sollten Sie etwas wie dieses:
Außerdem, wie @Daniel geschrieben hat, müssen Sie nur 1 Formular, um wickeln Sie Ihre
dataTable
und diecommandLink
s innerhalb der dataTable.UPDATE:
Es ist eine wichtige Dinge, die Sie wissen müssen:
Wenn Sie eine Liste als Attribut von Ihr verwalteten bean, diese Liste wird verwendet, um display-info (also eine dataTable), und man möchte eine Schaltfläche oder link innerhalb der datatable, deine managed bean MUSS eine Referenz auf die Liste in den Schöpfer. Dies kann erreicht werden, indem mindestens 2 Möglichkeiten:
a4j:keepAlive
tag von RichFaces odert:saveState
von MyFaces).Nachdem dies gesagt ist, und da bist du mit JSF 2, können Sie den ViewScope auf Ihre Bohne. Die bean wird nicht wiederhergestellt werden, nachdem ich eine Anfrage auf die gleiche Ansicht, so wird die Liste gespeichert automatisch im inneren der Bohne. Die Bohne sollte so Aussehen:
Nun, schauen wir uns die xhtml. Es ist ziemlich einfach:
... Und das ist es! Sie können navigieren Sie zu adminCreateStaffMember.xhtml ohne Probleme, und verwenden Sie die staffmember Objekt in der adminCreateStaffMember managed bean zum anzeigen der Daten (details). Ich habe versucht, diesen code selbst (ich bin in einem neuen pc also ich habe den code vor der Veröffentlichung, die software zu installieren, etc...).
adminCreateStaffMember
ist die Seite und ich bin dem Aufruf der jeweiligen Seite onClicking Veranstaltung.<h:commandLink value="Create New Staff Account" action="adminCreateStaffMember"/>
ab, wenn ich aufCreate New Staff Account
ich bekommen umgeleitet zuadminCreateStaffMember
Seite.commandLink
innerhalb einer datatable, dort ist keine `<table> DOM-element =\ sind Sie laden die datatable mit ajax oder sowas in der Art?List
im dataTable... das ist es...Manage Staff
,adminManageStaffMember
Seite angezeigt bekommen. Auf dieser Seite bin ich anzeigen Liste der Mitarbeiter. Oben rechts habe ichCreate New Staff Member
link. Wenn ich aufCreate ...
Seite geöffnet. In der Tabelle bin ich mit der Anzeige aller Mitarbeiter-Namen & Ihre ID. Was ich will zu tun ist Wenn ich auf dem Namen**, jeweiligen Mitarbeiter details angezeigt werden sollen. Zu versuchen, statt des Namens, ich bin derzeit mitCreate New Account
link für die Prüfung Zweck... ABER es FUNKTIONIERT NICHT 🙁