java - 请求的列表键 'countries' 无法解析为集合/数组/映射/枚举/迭代器类型。示例 : people or people. {名称}

标签 java jsp drop-down-menu struts2 struts-tags

我有一个需要使用 Struts 2 选择标记填充的下拉列表。

    <s:select label="Country" headerKey="-1" headerValue="Select Country" list="countries"  
                                                listKey="key" listValue="label" name="searchForm.custCountry"/> 
    

在我的操作类中,我有以下声明,后跟 getter 和 setter。

    ArrayList<DropDown> countries = new ArrayList<DropDown>();

我收到以下异常。哪里错了?

    SEVERE: Servlet.service() for servlet jsp threw exception
    tag 'select', field 'list', name 'searchForm.custCountry': The requested list key 'countries' 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:240)
        at org.apache.struts2.components.Component.findValue(Component.java:333)
        at org.apache.struts2.components.ListUIBean.evaluateExtraParams(ListUIBean.java:80)
        at org.apache.struts2.components.Select.evaluateExtraParams(Select.java:105)
        at org.apache.struts2.components.UIBean.evaluateParams(UIBean.java:902)
        at org.apache.struts2.components.UIBean.end(UIBean.java:544)
        at org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:42)
        at org.apache.jsp.accountSearchDtls_jsp._jspx_meth_s_005fselect_005f0(accountSearchDtls_jsp.java:979)
        at org.apache.jsp.accountSearchDtls_jsp._jspx_meth_s_005fdiv_005f0(accountSearchDtls_jsp.java:935)
        at org.apache.jsp.accountSearchDtls_jsp._jspService(accountSearchDtls_jsp.java:521)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
        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)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:96)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        at java.lang.Thread.run(Thread.java:745)

这是我获取下拉列表数据的方法。我有这个就足够了,如果不告诉我。

public ArrayList<DropDown> getCountrydd() {
        ArrayList<DropDown> countrydd = new ArrayList<DropDown>();
        try {
            OraConn conn = new OraConn();
            conn.getConnection();
            cstmt = conn.setProc("call mgm.getCountry(?)");
               cstmt.registerOutParameter(1, OracleTypes.CURSOR);
               cstmt.execute();
         rs = (OracleResultSet)cstmt.getObject(1);
               countrydd = rsToDropDown(rs);
         
        } catch (Exception e) {
               e.printStackTrace();
               //log.error("***getDSdropdowns*** ");
        } finally {
            closeORAConnection();
        }
        return countrydd;
    }

    

最佳答案

您需要更改代码来填充列表

public ArrayList<DropDown> getCountrydd() {

    List<DropDown> countrydd = new ArrayList<DropDown>();
    OraConn oraConn = new OraConn();
    Connection conn = null;
    CallableStatement cstmt = null;
    ResultSet rs = null;
    try {
        conn = oraConn.getConnection();
        cstmt = conn.prepareCall("{call mgm.getCountry(?)}");
        cstmt.registerOutParameter(1, OracleTypes.CURSOR);
        cstmt.executeUpdate();
        rs = (ResultSet)cstmt.getObject(1);

        rsToDropDown(rs, countrydd);

    } catch (Exception e) {
           e.printStackTrace();
           //log.error("***getDSdropdowns*** ");
    } finally {
        if (rs != null) 
            rs.close();              
        if (cstmt!= null) 
            cstmt.close();               
        if (conn != null) 
            conn.close();                   
    }
    return countrydd;
}

关于java - 请求的列表键 'countries' 无法解析为集合/数组/映射/枚举/迭代器类型。示例 : people or people. {名称},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26721881/

相关文章:

java - 无法提醒选择值的值

python - selenium python 元素从下拉菜单中选择

java - 如何从 ImageView 获取图像 id?

java - 无法使用 Java/JSP 将数据插入 Apache Derby 数据库

java - 调用全局数组

java - 我不能使用 .properties "override"@NotEmpty 消息

xml - JSTL x :forEach comma-separated output

css - CSS 下拉菜单中的第三级位置不正确

javascript - 下拉值取决于单选按钮的选择

java - Findbug 不可变日期修复不起作用