C:for:each 如果将参数传递给 List 方法,则无法获取值

C:for:each not getting the values if a pass a parameter to the List method

我有一个 java class,其中我有一个方法,该方法采用一些参数,例如

下面是我的 java 代码,它有一个 getoutlet 方法

public List<String> getoutlet(String idDB) throws ClassNotFoundException, SQLException {
    List<String> list = new ArrayList<String>();
    con = DBConnection.createConnection();
    statement = con.createStatement();
    String sqlOutlet="select CUSTOMERDESCRIPTOR from ecustomer where CUSTOMERIDENTIFIER in(select CUSTOMERIDENTIFIER from mt_distributrol where mt_distributr_vcdistributrcode = '"+idDB+"')";

    try {

        ResultSet resultSet = statement.executeQuery(sqlOutlet);
        while (resultSet.next()) {
            list.add(resultSet.getString("CUSTOMERDESCRIPTOR"));

        }
    } catch (SQLException e) {
        e.printStackTrace();
    }

    return list;
}

如果我输入 system.out.print 它会给我列表 [jayanagar,malleshwaram,kolar,ol1]

但是在使用 c:for:each

从 UI (jsp) 调用时抛出错误

我将 idDB 作为参数传递 现在在列表中我变得像这样

[jayanagar,malleshwaram,kolar,ol1]

现在我在我的 jsp 中通过 c:for:each 调用此方法以将其填充到 select 选项中,但问题是它抛出错误

就像我的 c:for:each 代码是

    <jsp:useBean id="obj" class="com.touchpoint.Dao.Outlet" scope="page" />
<select id="all" name="outlet">
                 <option>ALL</option> 
                <c:forEach var="item" items="${obj.outlet}">
                    <option>${item}</option>
                </c:forEach>
            </select> 

如果我没有向我的 getoutlet 方法传递任何参数,那么它工作正常,但现在我必须根据要求传递一些参数,它显示的错误是 '${obj.outlet }' 属性 'outlet' 未找到 com.touchpoint.Dao.Outlet 插座是我的 java class 名称 所以那里的任何人都请帮助我

这是我的javaclass

 public class Outlet {
    Connection con = null;
    Statement statement = null;
    ResultSet resultSet = null;

    public List<String> getoutlet(String idDB) throws ClassNotFoundException, SQLException {
        List<String> list = new ArrayList<String>();
        con = DBConnection.createConnection();
        statement = con.createStatement();
//      String sqlOutlet="select CUSTOMERDESCRIPTOR from ecustomer where CUSTOMERIDENTIFIER in(select CUSTOMERIDENTIFIER from mt_distributrol where mt_distributr_vcdistributrcode = '"+idDB+"')";
        String sqlOutlet="select * from ecustomer')";
/*System.out.println(idDB);*/
        try {

            ResultSet resultSet = statement.executeQuery(sqlOutlet);
            while (resultSet.next()) {
                list.add(resultSet.getString("CUSTOMERDESCRIPTOR"));

            }



        } catch (SQLException e) {
            e.printStackTrace();
        }

        return list;
    }



}

它正在返回我 [jayanagar,malleshwaram,kolar] 现在我想在 select 选项下拉列表中显示此列表

这是一种方法(解决方法)。

豆子Class:

public class MyBean {

    private String paramInfo;

    public void setParamInfo(String p) {
        paramInfo = p;
    }

    public String getParamInfo() {
        return paramInfo;
    }

    public List<String> getStuff(String param) {
        param = paramInfo; // substitute the value here
        List <String> list1 = Arrays.asList("A", "B", "C");
        List<String> list2 = new ArrayList<>();
        list2.addAll(list1);
        list2.add(param); // use the param value here
        return list2;
    }
}


注意:我没有更改方法的签名getStuff(String param);这仍然接受 String 参数。我添加了一个新 bean 属性 来替代参数值。注意 bean 的新 属性 值 paramInfo.

的用法


JSP 页:

<BODY>
    <h2>Testing JSP</h2>
    <jsp:useBean id="obj1" class="app.MyBean" scope="page" />
    <c:set var="param1" value="Z"/>

    <jsp:setProperty name="obj1" property="paramInfo" value="${param1}" />
    <c:set var="list1" value="${obj1.getStuff('')}"/>

    <c:forEach var="item" items="${list1}">
        <br/>ITEM: ${item} 
    </c:forEach>

    <br><br>
    <select name="list">
        <c:forEach items="${list1}" var="item">
            <option value="${item}"><c:out value="${item}" /></option>
        </c:forEach>
    </select>
</BODY>


注意:bean 的方法签名仍然保持不变。传递给该方法的值为空白 String。标签<jsp:setProperty ...实际上设置了参数值。

这样您就可以在 getStuff 方法中使用 paramInfo 属性 中的参数值。


结果:

ITEM: A 
ITEM: B 
ITEM: C 
ITEM: Z


注意:可以改变bean中的doStuff方法class不接受参数,用这种单独设置参数的方法。