如何使用EL将cn.replace(“cn =”,“”)打印为<input value =“”/>

时间:2015-07-14 15:40:15

标签: jsp jstl el

我是我的jsp代码:

<%

    for (int i = 0; i < list.size(); i++) {
        Entry var = (Entry) list.get(i);
        out.println(var.getCn().replace("cn=", ""));
        String cn = var.getCn();
        out.println("<form method=\"get\" action=\"Controller\">"
                + "<input type =\"hidden\" name=\"act1\" value = \"" + cn.replace("cn=", "") + "\">"
                + "<button type=\"submit\" name=\"act\"  value=\"SHOW\" id=\"act\" >Show</button>"
    }

进入JSTL:

  <c:forEach var="item" items="${list}">
    <p>
        <c:out value="${item.getCn()} "></c:out>
        <p>
        <c:set var="item" value="${item.getCn()}"></c:set>
          <input type ="hidden" name="act1" value ="??????????????">
        <button type="submit" name="act"  value="SHOW" id="act">Show</button>
</c:forEach>

我不知道如何传递参数“value”,可以通过cn.replace(“cn =”,“”)使用jsp轻松上传到我的servlet。

2 个答案:

答案 0 :(得分:1)

首先删除以下行:

<c:set var="item" value="${item.getCn()}"></c:set>

它覆盖了<c:forEach var="item">

关于具体问题,你可以使用单引号来表示EL中的字符串。

<input ... value="${item.cn.replace('cn=', '')}">

请注意,在javabean属性上,您不必像${item.getCn()}那样指定整个方法名称。您可以使用${item.cn}

另见:

无关具体问题,请注意,如果它涉及用户控制的输入,但仍然容易出现XSS attack hole,但是您的原始 scriptlet 方法也是。

答案 1 :(得分:1)

我相信您可以像使用{001}上的item一样使用变量cn。尝试这样的事情:

value ="${item.replace('cn=', '')}"

我不确定您的JSP中是否存在名为item的两个变量的问题,您可能希望更改其中一个变量的名称以防万一。这将是整个代码:

<c:forEach var="item" items="${list}">
    <p>
        <c:out value="${item.getCn()} "></c:out>
        <p>
        <c:set var="cn" value="${item.getCn()}"></c:set>
          <input type ="hidden" name="act1" value ="${cn.replace('cn=', '')}">
        <button type="submit" name="act"  value="SHOW" id="act">Show</button>