【问题标题】:how to compare two variables in <c:when>如何比较 <c:when> 中的两个变量
【发布时间】:2013-01-27 15:57:38
【问题描述】:
<% for(int count=0;count<lengthOfUser;count++) {%>
<%int tempuser= users[count]; %>

<c:forEach items="${userList}" var="user" varStatus="status">

        <c:choose>
             <c:when test="${user.userID == tempuser}">
                   hiii
                         </c:when>

    </c:choose>
</c:forEach>
<%}%>

这是我的 jsp 页面。我正在尝试使用两个变量。但是这段代码不起作用。请帮助我。

【问题讨论】:

  • 首先我认为使用 scriplets 不是一个好主意。其次我想知道 userList 变量是什么?
  • userList 是我的数组列表,我从中获得了来自数据库的结果集。如果我将尝试 那么它可以正常工作但是当我试图将它与不同的变量进行比较。它不起作用。
  • List 接口没有名为 userId 的方法
  • userlist 是我的结果集,userID 是 resultSet 中的字段之一
  • 如果我想从结果集中获取信息,我使用这个 userList.getInt("userID");其中 userId 是 db 中的列名

标签: java jsp jstl el


【解决方案1】:

所有 jstl 标签将在任何 scriptlet 标签之前被读取。因此,您必须使用 jstl &lt;c:set 标记创建一个变量。 看这个例子:

<% for (int i = 0; i < 3; i++) {%>
        <c:set value="${i}" var="tempuser1"></c:set>
        <c:set value="initialized with some value" var="tempuser2"></c:set>
        <c:out value="${tempuser1}"></c:out>
        <c:out value="${tempuser2}"></c:out>
        <br/>
        <%                            }
        %>

它在浏览器中打印:

initialized with some value 
initialized with some value 
initialized with some value

这里,&lt;c:out value="${tempuser1}"&gt;&lt;/c:out&gt; 打印空值,因为在读取 jstl 标记时,在 scriptlet 标记内声明的变量 (i) 不存在,因此变量 tempuser1(在 @ 987654328@) 初始化为空值。

但是,您可以按如下方式重写您的代码,它对我有用:

<c:forEach var="tempuser" items="users">
            <c:forEach items="${userList}" var="user" varStatus="status">

                <c:choose>
                    <c:when test="${user.userID == tempuser}">
                        hiii
                    </c:when>

                </c:choose>
            </c:forEach>
        </c:forEach>

【讨论】:

  • 我在 scriplet 中创建了 users 数组。那么我可以在 中使用它吗?
  • 如果users 声明在scriptlet 标记内,那么它将不起作用。您必须使其在任何范围内都可用并创建一个用户变量为&lt;c:set var="users" value="${userss}" scope="request"&gt;&lt;/c:set&gt;
  • 先生,我明白了。但我有很多用户。那么如何将该值设置为 ant 变量。请您解释一下。
  • 那么您的int tempuser= users[count]; 语句是错误的。您必须在控制器中初始化 users 变量,并使用 setAttribute 方法将该变量添加到范围内。如果你使用 session.setAttribute("userss", userss);,你必须使用&lt;c:set var="users" value="${userss}" scope="session"&gt;&lt;/c:set&gt; 中的会话范围。而且你还必须使用&lt;c:when test="${user.userID == tempuser.userID}"&gt;
  • 嗨@user1487778 请vote for the answer and accept it
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多