Hallo Zusammen,
hab ein "nettes" Problem mit der seid JSF 2.0 zur verfügung stehenden Möglichkeit AJAX zu verwendent.
Mein kleines Beispiel ist ein simples Master-Detail-Szenario:
- eine Liste mit Einträgen
- Auswahl eines Eintrags läd das dahinterliegende Objekt in ein Formular
- änderungen am ausgewählten Objekt durchführen > speichern
Das Problem:
Beim ERSTEN submit des Änderungsformulars (nach ein Eintrag aus der Liste ausgewählt wurde) wird weder das Model aktualisiert, noch die Action-Method aufgerufen. Beim ZWEITEN submit (also ohne das ausgewählte Item zu verändern, einfach die Änderungen noch mal ins Textfeld schreiben) werden die Daten sowohl in die Bean übertragen, also auch die Action-Method aufgerufen...
> ohne Ajax geht es wie erwartet auch beim ersten mal...? Hier mal ein Mini-Beispiel
Simple Java Bean:
ManagedBean
Und die Seite:
Mir sind inzwischen die Ideen ausgegangen
Danke schon mal für die Mühe und hoffe auf den entscheidenten Tipp
Dom
hab ein "nettes" Problem mit der seid JSF 2.0 zur verfügung stehenden Möglichkeit AJAX zu verwendent.
Mein kleines Beispiel ist ein simples Master-Detail-Szenario:
- eine Liste mit Einträgen
- Auswahl eines Eintrags läd das dahinterliegende Objekt in ein Formular
- änderungen am ausgewählten Objekt durchführen > speichern
Das Problem:
Beim ERSTEN submit des Änderungsformulars (nach ein Eintrag aus der Liste ausgewählt wurde) wird weder das Model aktualisiert, noch die Action-Method aufgerufen. Beim ZWEITEN submit (also ohne das ausgewählte Item zu verändern, einfach die Änderungen noch mal ins Textfeld schreiben) werden die Daten sowohl in die Bean übertragen, also auch die Action-Method aufgerufen...
> ohne Ajax geht es wie erwartet auch beim ersten mal...? Hier mal ein Mini-Beispiel
Simple Java Bean:
Code:
public class DemoBean
{
public DemoBean(String id, String text)
{
super();
this.id = id;
this.text = text;
}
private String id;
public String getId()
{
return id;
}
public void setId(String id)
{
this.id = id;
}
private String text;
public String getText()
{
return text;
}
public void setText(String text)
{
this.text = text;
}
}
ManagedBean
Code:
@ManagedBean(name = "demoHandler")
@SessionScoped
public class DemoHandler
{
private HashMap<String, DemoBean> map = new HashMap<String, DemoBean>();
private DemoBean selectedBean;
@PostConstruct
private void init()
{
map.put("ID1", new DemoBean("ID1", "Ich bin Id 1"));
map.put("ID2", new DemoBean("ID2", "Ich bin Id 2"));
map.put("ID3", new DemoBean("ID3", "Ich bin Id 3"));
map.put("ID4", new DemoBean("ID4", "Ich bin Id 4"));
}
public DemoBean getSelectedBean()
{
return selectedBean;
}
public void setSelectedBean(DemoBean selectedBean)
{
this.selectedBean = selectedBean;
}
public Set<String> getIds()
{
return this.map.keySet();
}
public String getSelectedBeanId()
{
return selectedBean == null ? null : selectedBean.getId();
}
public void setSelectedBeanId(String selectedBeanId)
{
this.selectedBean = map.get(selectedBeanId);
}
public String printout()
{
System.out.println(this.selectedBean.getText());
return null;
}
}
Und die Seite:
Code:
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:p="http://primefaces.prime.com.tr/ui">
<h:head>
</h:head>
<h:body>
<h:form id="sForm">
<h:selectOneListbox value="#{demoHandler.selectedBeanId}">
<f:selectItems value="#{demoHandler.ids}"/>
<f:ajax render=":out" execute="sForm"/>
</h:selectOneListbox>
</h:form>
<h:panelGrid id="out">
<h:form>
<h:inputText value="#{demoHandler.selectedBean.text}" />
<h:commandButton value="Save" action="#{demoHandler.printout()}" />
</h:form>
</h:panelGrid>
</h:body>
</html>
Mir sind inzwischen die Ideen ausgegangen
Danke schon mal für die Mühe und hoffe auf den entscheidenten Tipp
Dom
Zuletzt bearbeitet: