【问题标题】:Struts 2 Populate select drop listStruts 2 填充选择下拉列表
【发布时间】:2012-09-26 10:26:27
【问题描述】:

您好,我想用一些值填充选择下拉列表。我使用 Struts 2、Tiles 和 JSP。我在 Action 类中初始化了我的列表,但我仍然收到以下错误: 原因:标签“选择”、字段“列表”、名称“anneeResultat”:请求的列表键“anneesResultatsList”无法解析为集合/数组/映射/枚举/迭代器类型。示例:人或人。{name} - [未知位置] 这是我在 Action 类中的代码:

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>

有人可以帮助我吗? 我从昨天开始就有这个问题了。

【问题讨论】:

  • 您是否在您的操作方法中声明了anneesResultatsList?因为 OGNl 将在操作级别而不是在方法内部查看它
  • “返回成功}”让人很难理解是在动作级别还是在方法内部。

标签: struts2 tiles


【解决方案1】:

Prepare 拦截器调用 prepare() 对实现的操作 可准备的。这个拦截器在任何情况下都非常有用 您需要确保在实际执行方法之前运行一些逻辑 运行。

您的操作应该扩展 Preparable 拦截器并覆盖 prepare() 方法,提供预先填充的数据。

Struts2 Prepare Interceptor

【讨论】:

  • 我相信 OP 已经在方法中定义了这个属性,而 OGNL 正在值堆栈中将它作为 Action 的属性进行搜索,但无法找到它。您无需在可准备方法中执行此操作
  • 我实现了 Preparable 接口并在我的操作中添加了 prepare 方法来初始化我的列表。但问题依然存在。不是缺少数据,而是 Struts 无法识别我的列表对象!
  • @Umesh 是的,你是对的,但我正在尝试建议以更好的方式来做。
  • 为了解决这个问题,Struts2 提供了一个漂亮的功能,只需附加 ?debug=xml 并发现 anneesResultatsList 在 valuestack 中是否可用。参考链接struts.apache.org/2.3.4/docs/debugging.html
  • ?debug=xml 不显示动作属性!它显示类、语言环境、操作名称……
【解决方案2】:

将 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>

【讨论】:

    【解决方案3】:

    其实是这样的,

    Map session = ActionContext.getcontext().getsession();
    session.put("key",list);
    
    <s:select list="%{#session.key}">
    

    【讨论】:

    • 请简要解释您的答案,使其对 OP 和其他读者更有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多