2012-10-05 106 views
0

嗨,我想用一些值填充选择下拉列表。我使用Struts 2,Tiles和JSP。我在Action类中初始化我的列表,但我仍然收到以下错误: 由标记'select',字段'list',名称'anneeResultat'引起:请求的列表键'anneesResultatsList'无法解析为集合/数组/映射/枚举/迭代器类型。例:人或人{名} - [未知地点] 这是我在Action类代码:Struts 2填充选择下拉列表

private AnneeResultat anneeResultat; 
private Map<String, String> anneesResultatsList = new HashMap<String, String>(); 

public Map<String,String> getAnneesResultatsList() { 
    this.anneesResultatsList.put("2005","2005"); 
    this.anneesResultatsList.put("2006","2006"); 
    this.anneesResultatsList.put("2007","2007"); 
    this.anneesResultatsList.put("2008","2008"); 
    this.anneesResultatsList.put("2009","2009"); 
    this.anneesResultatsList.put("2010","2010"); 
    this.anneesResultatsList.put("2011","2011"); 

     return this.anneesResultatsList; 
    } 
    public void setAnneesResultatsList(Map<String,String> anneesResultatsList) { 
     this.anneesResultatsList = anneesResultatsList; 
    } 

    return SUCCESS; 
    } 

我的struts.xml文件包含:

<action name="ChoixAxes" class="fr.si2m.occ.web.actions.ChoixAxesAction" 
      method="execute"> 
      <result type="tiles">choixAxes.tiles</result> 
     </action> 

我的JSP是在这里:

<s:set name="theme" value="'xhtml'" scope="page" /> 
     <s:form action="ChoisirAxes" name="choices" id="choices"> 
     <s:select name="anneeResultat" label="Année de résultats" list="anneesResultatsList"></s:select> 

     <s:radio label="Listes nominatives" name="listesNominatives" list="#{'1':'Oui','2':'Non'}" value="2" /> 
     <s:submit value="Calculer provisions" name="calculerProvisions"/> 
     <s:reset value="Annuler" /> 
     <input type="button" value="Critères sauvegardés" id="criteresSauvegardes"/> 
     </s:form> 

有人可以帮助我吗? 自从昨天我有这个问题。

+1

你宣布你的行动的方法内'anneesResultatsList'?因为OGNl将在行动级别上查看它,而不是在方法 –

+0

内“返回成功”,这使得难以理解它是在操作级别还是在内部方法中。 –

回答

0

在实施 准备的动作上准备拦截器调用prepare()。这个拦截器对于在执行实际执行方法 之前需要确保某些逻辑运行的任何情况都非常有用。

你的动作应该扩展Preparable拦截器并覆盖prepare()方法,给予预先填充的数据。

Struts2 Prepare Interceptor

+0

我相信OP已经在方法中定义了这个属性,而OGNL正在将它作为Action的属性在值栈中搜索并且无法找到它。您不需要在可准备的方法中执行此操作 –

+0

我实现了可编辑接口并在我的操作中添加了准备方法,以初始化我的列表。但问题依然存在。这不是丢失的数据,但Struts无法识别我的列表objet! – Pracede

+0

@ Umesh是的,你是对的,但我试图建议以更好的方式做到这一点。 –

0

认沽AnneesResultatsList在会议

Map session=ActionContext.getScession();session.put("list",AnneesResultatsList); 
<pre> 
s:select name="anneeResultat" label="Année de résultats" list="%{#session.list}""></s:select> 
</pre> 
-1

实际上它是,

Map session = ActionContext.getcontext().getsession(); 
session.put("key",list); 

<s:select list="%{#session.key}"> 
+0

请简要解释您的答案,以使其对OP和其他读者更有用。 –