C:for:如果将参数传递给List方法,则每个都不获取值

时间:2018-11-15 06:54:21

标签: java jstl

我有一个Java类,其中有一个方法,该方法带有一些参数,例如

下面是我的具有getoutlet方法的Java代码

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]

现在我通过c:for:each在我的jsp中调用此方法以在选择选项中填充此方法,但是问题是它引发了错误

就像我的c:for:每个代码都是

    <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类型上找不到。Outlet是我的Java类名称 所以有人在那里请帮助我

这是我的java类

 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] 现在我想在我的选择选项下拉列表中显示此列表

1 个答案:

答案 0 :(得分:0)

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

Bean类:

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 ...实际上是设置参数值。

通过这种方式,您可以在paramInfo方法的getStuff属性中使用参数值。


结果:

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


注意:使用这种分别设置参数的方法,可以更改Bean类中的doStuff方法以不接受参数。