我在尝试更新某些数据时遇到了一些麻烦,我遇到了一些例外......
我读了Struts 2 nesting iterators并应用了修改,但它不起作用......
这是Java类:
public class Epreuveevb implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private int idEpreuve;
private String nom;
private int coef;
private int note;
private int idExamen;
/* all setters and getters */
然后第二个:
public class Examenevb implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private int idJury;
private String nom;
private String prenom;
private List<Epreuveevb> listeEpreuves = null;
/* all setters and getters */
最后,这是最高级的(使用servlet):
public class Saisie extends ActionSupport {
static final Logger log = LogManager.getLogger(Saisie.class);
private int idJury;
private Jury leJury;
private List<Examenevb> lesExamens;
[...]
public List<Examenevb> getLesExamens() {
return lesExamens;
}
public void setLesExamens(List<Examenevb> lesExamens) {
this.lesExamens = lesExamens;
}
现在JSP:
<s:form theme="simple" action="relevernote">
<table class="notation">
<tbody>
<s:iterator value="lesExamens" status="examstat">
<tr>
<td class="default"><span class="gras">${nom}</span>, ${prenom}</td>
<s:iterator value="listeEpreuves" status="eprstat">
<td>
${nom}<br/>
<s:textfield name="lesExamens[%{#examstat.index}].listeEpreuves[%{#eprstat.index}].note"/>
<p> </p>
</td>
</s:iterator>
</tr>
</s:iterator>
</tbody>
</table>
<p> </p>
<p class="center"><s:submit value="Valider"/></p>
</s:form>
一切正常,所有标记在文本字段中都正确。例如,这是最终的HTML页面:
<td class="default"><span class="gras">EL MORABIT</span>, MOHAMED</td>
<td>
Maths<br/>
<input type="text" name="lesExamens[0].listeEpreuves[0].note" value="0" id="relevernote_lesExamens_0__listeEpreuves_0__note"/>
<p> </p>
</td>
但提交时,我会在日志中看到:
2017-05-16 17:29:44,910 ERROR com.opensymphony.xwork2.interceptor.ParametersInterceptor [notifyDeveloperParameterException] Developer Notification (set struts.devMode to false to disable this message):
Unexpected Exception caught setting 'lesExamens[0].listeEpreuves[0].note' on 'class evb.pg.notation.Saisie: Error setting expression 'lesExamens[0].listeEpreuves[0].note' with value ['0', ]
2017-05-16 17:29:44,914 ERROR com.opensymphony.xwork2.interceptor.ParametersInterceptor [notifyDeveloperParameterException] Developer Notification (set struts.devMode to false to disable this message):
Unexpected Exception caught setting 'lesExamens[0].listeEpreuves[1].note' on 'class evb.pg.notation.Saisie: Error setting expression 'lesExamens[0].listeEpreuves[1].note' with value ['0', ]
出了什么问题?有什么想法吗?
我多次检查过setter / getters,一切都很好......
答案 0 :(得分:0)
我刚刚解决了问题,现在一切都好了。但我希望被告知可能存在更好的解决方案。如果有,请告诉我。
让我告诉你我带来了哪些修改。
首先,我忘记了Epreuveevb和Examenevb类的空构造函数。
其次,我向ActionSupport类添加了Preparable和ModelDriven接口:
public class Saisie extends ActionSupport implements Preparable,
ModelDriven<List<Examenevb>> {
static final Logger log = LogManager.getLogger(Saisie.class);
private int idJury;
private Jury leJury;
private List<Examenevb> lesExamens;
private int idPassageGrade;
这些接口迫使我采用两种额外的方法:
@Override
public List<Examenevb> getModel() {
// TODO Auto-generated method stub
return lesExamens;
}
@Override
public void prepare() throws Exception {
// TODO Auto-generated method stub
}
最后,JSP变得更重了一些:
<s:form theme="simple" action="relevernote">
<table class="notation">
<tbody>
<s:iterator value="lesExamens" status="idexam">
<tr>
<td class="default">
<span class="gras">${nom}</span>, ${prenom}
<s:hidden name="lesExamens[%{#idexam.index}].idJury"/>
<s:hidden name="lesExamens[%{#idexam.index}].idAdherent"/>"
<s:hidden name="lesExamens[%{#idexam.index}].nom"/>
<s:hidden name="lesExamens[%{#idexam.index}].prenom"/>
</td>
<s:iterator value="listeEpreuves" status="idepr">
<td>
${nom}<br/>
<s:hidden name="lesExamens[%{#idexam.index}].listeEpreuves[%{#idepr.index}].idEpreuve"/>
<s:hidden name="lesExamens[%{#idexam.index}].listeEpreuves[%{#idepr.index}].idExamen"/>
<s:hidden name="lesExamens[%{#idexam.index}].listeEpreuves[%{#idepr.index}].coef"/>
<s:hidden name="lesExamens[%{#idexam.index}].listeEpreuves[%{#idepr.index}].nom"/>
<s:textfield name="lesExamens[%{#idexam.index}].listeEpreuves[%{#idepr.index}].note"/>
<p> </p>
</td>
</s:iterator>
</tr>
</s:iterator>
</tbody>
</table>
<p class="center"><s:submit value="Valider"/></p>
</s:form>
为了确保设置所有属性,我添加了几个标签......也许有更好的方法。如果是的话,请告诉我。