【问题标题】:JavaEE JSTL EL Long value to String type casting [duplicate]JavaEE JSTL EL长值到字符串类型转换[重复]
【发布时间】:2015-03-27 05:22:56
【问题描述】:

我正在尝试将条件写入 jstl if 标记,

        <c:forEach var="ledg" items="user_ledgers">

            <c:if test="${ledg.transactionID == param['trns']}">

                <c:out value="${ledg.name}"/>
            </c:if>
        </c:forEach>

Ledg 是 ledger 类的对象,而 transactionID 是 long 类型的字段。

我在运行时发现了这个错误。

javax.el.PropertyNotFoundException: Property 'transactionID' not found on type java.lang.String

我尝试通过多种方式将 transactioID 值转换为 String。但不工作

字符串连接

<c:if test="${(ledg.transactionID+’’) == param['trns']}">

使用自定义标签

            <c:set var="equals" scope="page">
                <z:doTheyEquals v1="${ledg.transactionID}" v2="${param['trns']}"/>
            </c:set>

它还需要字符串类型。

将 user_ledges 设置为会话范围

            LedgerDAO ledg = Data.getLedgerDAO();
            List ledgers = ledg.getLedgers(u);
            session.setAttribute("user_ledgers",ledgers);

getLedgers()

public List<Ledger> getLedgers(User u) {
        List ledgers = new ArrayList<Ledger>();
        try (Connection conn = pool.getConnection()){
            PreparedStatement query = conn.prepareStatement("SELECT * FROM user_ledgers INNER JOIN ledgers ON user_ledgers.l_id = ledgers.id WHERE user_ledgers.u_id=? ORDER BY name ASC;");
            query.setString(1,u.getId()+"");
            ResultSet rs = query.executeQuery();
            while(rs.next()){
                Ledger l = new Ledger();
                l.setId(rs.getLong(4));
                l.setName(rs.getString(5));
                l.setLayout(rs.getString(7));
                l.setTransactionID(rs.getLong(3));
                l.setType(rs.getString(6));
                ledgers.add(l);
            }
        } catch (Exception e) {
            e.printStackTrace();
            ledgers=null;
        }
        return ledgers;
    }

有什么帮助吗?谢谢。

【问题讨论】:

  • 如何将 user_ledgers 对象传递到 JSP 中?您收到的异常清楚地表明 ledg 对象是一个字符串。
  • user_ledgers 是一个列表,其中包含一组分类帐对象并作为属性位于会话范围内。
  • 张贴代码说明你是如何做到的。

标签: jakarta-ee jstl el


【解决方案1】:

使用这个:

<c:forEach var="ledg" items="${sessionScope.user_ledgers}">
            <c:if test="${ledg.transactionID == param['trns']}">
                <c:out value="${ledg.name}"/>
            </c:if>
  </c:forEach>

【讨论】:

  • 这是导致上述错误的代码。 javax.el.PropertyNotFoundException:在 java.lang.String 类型上找不到属性“transactionID”
  • 没有。我已经用 items="${sessionScope.user_ledgers}" 替换了 items="sessionScope.user_ledgers"。问题是您没有正确阅读列表。
  • 它有效。非常感谢。
猜你喜欢
  • 2011-04-04
  • 1970-01-01
  • 2014-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-30
  • 1970-01-01
相关资源
最近更新 更多