Mi è venuto fuori uno strano problema. Ho cercato di isolare il problema in modo seguente è il mio codice semplificato.I campi di input contengono valori precedenti solo se la convalida non è riuscita
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>
Questo è il percorso di errore:
- Caricare la pagina
- Fai clic sul link "Modifica" in prima fila (display pop-up)
- In popup, deselezionare il campo "Età" e fare clic su "Salva". (Richiesto messaggio visualizzato)
- Fare clic su Annulla (senza riempire il campo "Età")
- Fare clic sul secondo collegamento.
- Ora mostra dati non pertinenti (dati precedenti). - Questo è il problema
- Anche se faccio clic sul pulsante "Nuovo" mostra dati errati.
Ciò accade solo se una convalida non è riuscita nel popup.
C'è una soluzione per questo?
So che questo non ti aiuterà a capire il problema, ma non dovresti avere fiducia nel controller (lato server) per cancellare i valori nella vista (la pagina JSF) quando questo può essere fatto con Javascript semplice (questo vale solo nel nuovo ''). –
Grazie per il tuo suggerimento sull'utilizzo di javascript. Ci proverò e ti informerò non appena avrò avuto un tempo. – prageeth
@LuiggiMendoza: ho usato javascript e ho avuto un certo successo. Ma la mia situazione ** reale ** è un po 'complessa e non potrei usare javascript per la mia attuale ** situazione reale **. Tuttavia, la ringrazio molto per il suggerimento e spero di aggiungere la soluzione alternativa di javascript come risposta a questa domanda per l'uso di altre persone quando ho tempo. :) – prageeth