将地图加载到 jsp 以填充 struts2 中的下拉列表

Load Map into jsp to populate drop down list in struts2

在我的工作中,我必须维护以前的开发人员编写的一些 Web 应用程序,我最近必须将 Struts 从版本 2.1.6 升级到 2.3.32

更新进展顺利,我必须在应用程序中进行的唯一真正更改是更改旧的

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>

web.xml 中,但现在的问题是应用程序填充的每个下拉列表都会失败,并出现与这些异常相同的异常:

mars 23, 2017 8:14:03 AM org.apache.catalina.core.ApplicationDispatcher invoke
GRAVE: "Servlet.service()" pour la servlet jsp a lancé une exception
tag 'select', field 'list', name 'QUALITE': The requested list key 'liste_Qualite' could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name} - [unknown location]
    at org.apache.struts2.components.Component.fieldError(Component.java:263)
    at org.apache.struts2.components.Component.findValue(Component.java:356)
    at org.apache.struts2.components.ListUIBean.evaluateExtraParams(ListUIBean.java:82)
    at org.apache.struts2.components.Select.evaluateExtraParams(Select.java:105)
    at org.apache.struts2.components.UIBean.evaluateParams(UIBean.java:893)
    at org.apache.struts2.components.UIBean.end(UIBean.java:535)
    at org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:42)
    ...



mars 23, 2017 8:14:03 AM org.apache.struts2.dispatcher.DefaultDispatcherErrorHandler error
GRAVE: Exception occurred during processing request: tag 'select', field 'list', name 'QUALITE': The requested list key 'liste_Qualite' could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name} - [unknown location]
org.apache.jasper.JasperException: tag 'select', field 'list', name 'QUALITE': The requested list key 'liste_Qualite' could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name} - [unknown location]
    at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:538)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:430)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
    ...



mars 23, 2017 8:14:03 AM org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: "Servlet.service()" pour la servlet default a généré une exception
java.lang.IllegalStateException
    at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407)
    at org.apache.struts2.dispatcher.DefaultDispatcherErrorHandler.sendErrorResponse(DefaultDispatcherErrorHandler.java:80)
    at org.apache.struts2.dispatcher.DefaultDispatcherErrorHandler.handleError(DefaultDispatcherErrorHandler.java:59)
    at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:920)
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:587)
    at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:81)
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
    ...

最后一个异常让我认为问题出在 web.xml 中过滤器的更改,因为应用程序的其余部分尚未修改。但是经过一天的搜索,我似乎无法找到使应用程序再次运行的方法。

地图设置初始化并填写在这个文件中:

public class OrdreMissionAction_ext extends ActionSupport {
    ...
    Map<String,String> liste_Qualite = new HashMap<String,String>();
    public Map<String,String> getliste_Qualite() {
        return liste_Qualite;
    }
    ...
    public String init_om() throws NamingException, IOException{
        liste_Qualite = new LinkedHashMap<String,String>();      
        liste_Qualite.put("IAT","Personnel IATSS");
        liste_Qualite.put("PSD","Personnel uB Postdoctorant");
        liste_Qualite.put("ENS","Personnel uB Ens/Chercheur"); 
        ....
        return SUCCESS;
    }
    ...
}

struts.xml中这样声明:

<package name="actions_ext"  namespace="/gom_ext" extends="struts-default">
    <default-action-ref name="saisir_Om"></default-action-ref>  
    <action name="saisir_Om" class="beansActions.OrdreMissionAction_ext" method="init_om">
        <interceptor-ref name="StackForms"/>
        <result name="success">/WEB-INF/gom_ext/saisir_Om.jsp</result>
    </action>
    ...
</package>

然后在 jsp 中调用这样的行:

<s:select label="Choisissez une qualité" headerKey="" headerValue="Choisissez une qualité" list="liste_Qualite" name="QUALITE" id="QUALITE" tabindex="3" onchange="Collab_ext(this.value)"/>

在查看了无数示例和此处提出的问题后,我没有在这些声明中看到任何错误,而且我仍然没有想出如何修复它。你知道哪里出了问题吗?


页面是通过其操作 http://example.com/gom_ext/saisir_Om 调用的,因此调用了 init_om() 函数并填充了地图。

在异常发生之前,应用程序开始发送到浏览器,如果我删除选择,页面似乎可以正常工作。似乎唯一的问题是 jsp 未能成功检索差异列表。

嗯,改一下

getliste_Qualite

getListe_Qualite

很高兴为您提供帮助 ;-)