2017-05-16 64 views
0

我有一些麻烦试图更新一些数据,我面临着一些例外情况时更新文本框时...Struts2的:麻烦迭代

我读了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>&nbsp;</p> 
        </td> 
        </s:iterator> 
       </tr> 
       </s:iterator> 
      </tbody> 
     </table> 
     <p>&nbsp;</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>&nbsp;</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', ] 

什么错?任何想法 ?

我多次检查制定者/吸气,一切都很好...

+0

我改变了Examenevb类,我删除了“private List listeEpreuves = null;”并用“private List listeEpreuves”替换它。 不幸的是,错误仍然存​​在... –

+0

确保你有正确的getters和setters –

+0

你好Roman,我只检查了所有setters和getters,一切都很好。 但是,我正在阅读一本关于Struts2的书。我可能找到了一个解决方案:使用Preparable接口。希望我会解决这个问题...... –

回答

0

我只是解决了这一问题,所有现在确定。但我希望获得更好的解决方案。如果有,请告诉我。

让我告诉你我带来了哪些修改。

首先,我忘了Epreuveevb和Examenevb类的空构造函数。

其次,我增加可制备和模型驱动接口ActionSupport类:

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>&nbsp;</p> 
       </td> 
       </s:iterator> 
      </tr> 
      </s:iterator> 
     </tbody> 
    </table> 
    <p class="center"><s:submit value="Valider"/></p> 
    </s:form> 

为了确保设置所有属性,我添加了几个标签......也许重新是一个更好的方法。如果是这样,请让我知道。