Ich hatte ein seltsames Problem. Ich habe versucht, das Problem so zu isolieren, dass mein vereinfachter Code folgt.Eingabefelder halten vorherige Werte nur dann, wenn die Validierung fehlgeschlagen ist
public class MyBean {
private List<Data> dataList;
Data selectedData;
public MyBean() {
dataList = new ArrayList<Data>();
dataList.add(new Data("John", 16));
dataList.add(new Data("William", 25));
}
public List<Data> getDataList() {
return dataList;
}
public void edit(Data data) {
selectedData = data;
}
public void newData() {
selectedData = new Data(null, null);
}
public Data getSelectedData() {
return selectedData;
}
public class Data {
String name;
Integer age;
Data(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
}
xhtml:
<rich:modalPanel id="pop">
<h:form>
Name: <h:inputText value="#{myBean.selectedData.name}" required="true" id="txtName"/><br/>
Age : <h:inputText value="#{myBean.selectedData.age}" required="true" id="txtAge"/>
<a4j:commandButton value="Save"/>
<a4j:commandButton value="Close" onclick="Richfaces.hideModalPanel('pop');return false;"/>
<br/>
<rich:message for="txtName"/><br/>
<rich:message for="txtAge"/>
</h:form>
</rich:modalPanel>
<h:form>
<rich:dataTable value="#{myBean.dataList}" var="data">
<rich:column>#{data.name}</rich:column>
<rich:column>
<a4j:commandLink value="Edit" action="#{myBean.edit(data)}" reRender="pop" oncomplete="Richfaces.showModalPanel('pop')"/>
</rich:column>
</rich:dataTable>
<a4j:commandButton value="New" action="#{myBean.newData()}" reRender="pop" oncomplete="Richfaces.showModalPanel('pop')"/>
</h:form>
Dies ist der Weg zum Fehler:
- Laden Sie die Seite
- Klicken Sie auf den Link "Bearbeiten" in der ersten Reihe (Popup-Displays)
- Löschen Sie im Popup-Fenster das Feld "Alter" und klicken Sie auf "Speichern". (Erforderlich angezeigte Nachricht)
- Klicken Sie auf Abbrechen (ohne das Feld "Alter" zu füllen)
- Klicken Sie auf den zweiten Link.
- Jetzt zeigt es irrelevante Daten (vorherige Daten). - Das ist das Problem
- Auch wenn ich auf "Neu" klicken, zeigt es falsche Daten.
Dies geschieht nur, wenn eine Validierung im Popup fehlgeschlagen ist.
Gibt es dafür eine Lösung?
Ich weiß, das wird Ihnen nicht helfen, das Problem zu verstehen, aber Sie sollten dem Controller (der Serverseite) nicht vertrauen, um Werte in der Ansicht (der JSF-Seite) zu löschen, wenn dies mit einfachem Javascript (Dies gilt nur für den neuen ''). –
Vielen Dank für Ihren Vorschlag zur Verwendung von Javascript. Ich werde es versuchen und informieren, sobald ich eine Zeit habe. – prageeth
@LuiggiMendoza: Ich benutzte Javascript und hatte etwas Erfolg. Aber meine ** echte ** Situation ist ein wenig komplex und ich konnte Javascript nicht für meine aktuelle ** reale Situation ** verwenden. Aber vielen Dank für den Hinweis und ich hoffe, die Javascript-Problemumgehung als eine Antwort auf diese Frage für andere Leute zu verwenden, wenn ich eine Zeit bekam. :) – prageeth