nintendoluk
Commander
- Registriert
- Mai 2014
- Beiträge
- 2.124
Hallo zusammen!
Ich baue zurzeit ein kleines JSF Portlet (für Liferay), welches ich auf einen JBoss aufsetze. Dieses Programm baut anhand einer Combobox eine Tabelle auf. Diese Tabelle kann man dann in der "Value"-Zelle editieren, man kann aber auch eine ganze Zelle komplett löschen.
Diese beiden Funktionen laufen aber noch nicht ganz so wie ich will.
Zur verbesserten Anschaulichkeit ist hier mal ein Screenshot von meiner Applikation:
Und hier ist mein Programm Code (Nur das mMn relevante, damit es übersichtlich bleibt)
JmxPropertyManager.xhtml
JmxPropertyManagerBean.Java
Wenn ich nun auf den Delete-Button (bzw CommandLink) Klicke, kommt zwar die Sicherheitsabfrage, ob man wirklich löschen möchte, aber bei einem Klick auf "Ja" Passiert gar nichts.
Und bei einem Klick auf "Edit" bekommt man zwar die Möglichkeit den Wert umzuschreiben, aber wenn man auf "Accept" oder "Decline" klickt passiert nichts. Die Zelle bleibt einfach ohne Rückmeldung weiter editierbar.
Durchs Debugging weiß ich, dass bei diese Aktionen die Methoden "onRowDelete" und "onRowEdit" erst gar nicht aufgerufen werden.
Auch noch interessant: Wenn ich den Wert (den eigentlich die Combobox festlegen sollte) von selectedContextName Hartgecoded in Zeile 40 der Bean einfüge funktioniert alles einwandfrei. Nur Leider eben nur für eine einzige festgelegte Auswahl.
Das Problem ist also wahrscheinlich, dass der Wert der Combobox zu spät erfasst wird und die Tabelle nicht gefüllt werden kann. Weil PrimeFaces zu dem Zeitpunkt wo es Editieren will keine Tabelle hat, werden auch die Edit/Delete Funktionen erst gar nicht aufgerufen. Soweit meine Vermutung.
Der ganze Spaß wirft übrigens keine einzige Exception oder Fehlermeldung.
Bitte Helft mir! Was soll ich tun? :-(
Viele Grüße
Lukas
Ich baue zurzeit ein kleines JSF Portlet (für Liferay), welches ich auf einen JBoss aufsetze. Dieses Programm baut anhand einer Combobox eine Tabelle auf. Diese Tabelle kann man dann in der "Value"-Zelle editieren, man kann aber auch eine ganze Zelle komplett löschen.
Diese beiden Funktionen laufen aber noch nicht ganz so wie ich will.
Zur verbesserten Anschaulichkeit ist hier mal ein Screenshot von meiner Applikation:
Und hier ist mein Programm Code (Nur das mMn relevante, damit es übersichtlich bleibt)
JmxPropertyManager.xhtml
Code:
.......
<h:form id="theForm">
<p:selectOneMenu id="console"
value="#{jmxPropertyManagerBean.selectedContextName}">
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{jmxPropertyManagerBean.contextNames}" />
<p:ajax update=":theForm" />
</p:selectOneMenu>
.......
<p:dataTable var="prop" value="#{jmxPropertyManagerBean.properties}"
editable="true" emptyMessage="Keine Properties gefunden.">
<f:facet name="header">Properties</f:facet>
<p:ajax event="rowEdit"
listener="#{jmxPropertyManagerBean.onRowEdit}" />
<p:ajax event="rowEditCancel" />
<p:column headerText="App">
<h:outputText value="#{prop.appName}" />
</p:column>
<p:column headerText="Domain">
<h:outputText value="#{prop.domainName}" />
</p:column>
<p:column headerText="Property">
<h:outputText value="#{prop.propertyName}" />
</p:column>
<p:column headerText="Value">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{prop.value}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{prop.value}" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column style="width:32px">
<p:rowEditor />
<p:commandLink styleClass="ui-icon ui-icon-trash"
style="padding: 0;"
action="#{jmxPropertyManagerBean.onRowDelete(prop)}">
<p:confirm header="Löschvorgang"
message="Wollen Sie das Property wirklich löschen?"
icon="ui-icon-alert" />
</p:commandLink>
</p:column>
</p:dataTable>
</h:form>
.....
JmxPropertyManagerBean.Java
Code:
@RequestScoped
public class JmxPropertyManagerBean
{
String selectedContextName; //Mit Getter & Setter
List<String> contextNames;
List<JmxProperty> properties;
.....
public void onRowEdit(final RowEditEvent event)
{
final JmxProperty property = (JmxProperty) event.getObject();
saveProperty(property);
updateProperties();
}
public void onRowDelete(final JmxProperty property)
{
property.setValue(null);
saveProperty(property);
updateProperties();
}
public List<String> getContextNames()
{
if(this.contextNames == null)
{
this.contextNames = loadContextNames(); //Alle Verfügbaren ContextNames werden aus einer Datenbank geladen
}
return this.contextNames;
}
public List<JmxProperty> getProperties()
{
//Zu Testzwecken:
// setSelectedContextName("JmxPropertyManager");
if((this.selectedContextName != null) && (this.properties == null))
{
updateProperties(); //Hier wird selectedContextName benötigt und die Property-Liste aus einer Datenbank geholt
}
return this.properties;
}
.......
Wenn ich nun auf den Delete-Button (bzw CommandLink) Klicke, kommt zwar die Sicherheitsabfrage, ob man wirklich löschen möchte, aber bei einem Klick auf "Ja" Passiert gar nichts.
Und bei einem Klick auf "Edit" bekommt man zwar die Möglichkeit den Wert umzuschreiben, aber wenn man auf "Accept" oder "Decline" klickt passiert nichts. Die Zelle bleibt einfach ohne Rückmeldung weiter editierbar.
Durchs Debugging weiß ich, dass bei diese Aktionen die Methoden "onRowDelete" und "onRowEdit" erst gar nicht aufgerufen werden.
Auch noch interessant: Wenn ich den Wert (den eigentlich die Combobox festlegen sollte) von selectedContextName Hartgecoded in Zeile 40 der Bean einfüge funktioniert alles einwandfrei. Nur Leider eben nur für eine einzige festgelegte Auswahl.
Das Problem ist also wahrscheinlich, dass der Wert der Combobox zu spät erfasst wird und die Tabelle nicht gefüllt werden kann. Weil PrimeFaces zu dem Zeitpunkt wo es Editieren will keine Tabelle hat, werden auch die Edit/Delete Funktionen erst gar nicht aufgerufen. Soweit meine Vermutung.
Der ganze Spaß wirft übrigens keine einzige Exception oder Fehlermeldung.
Bitte Helft mir! Was soll ich tun? :-(
Viele Grüße
Lukas