JSP标记的问题 - Java代码作为值

时间:2009-09-21 18:04:16

标签: java jsp attributes

我对JSP标记有疑问 - 如何在Java代码中插入属性值? 这是我的代码:

<%!
    String ii = new String();
 %>

   <%

    try {
        String id = request.getParameter("a");
        int i = Integer.valueOf(id);
        ii = String.valueOf(i);
    } catch (Exception e) {
        response.sendError(500);
    }

    %>
            <div style="float:right;margin-right:20px;">
                <strong>From: </strong> <em><post:ShowPm postId="<%=ii%>" /></em><br>
            </div>

如果我运行它,会发生错误500 - stack 第48行是这段代码:

<strong>From: </strong> <em><post:ShowPm postId="<%=ii%>" /></em><br>

我正在使用Struts 1和带有自己标签的JSP(是我的标签)。

2 个答案:

答案 0 :(得分:6)

听起来你需要更改你的tld,以便属性可以接受表达式:

   <attribute>
      ...
      <rtexprvalue>true</rtexprvalue>
      ...
   </attribute>

答案 1 :(得分:1)

通常会对这个JSP提供一些反馈。

你意识到变量“ii”不是线程安全的吗? ii是一个类变量。 只创建一个servlet实例,并通过它运行多个线程。 因此,您可能会有多个线程编辑此值并打印出不一致的结果。

解决方案:将其声明为&lt;%scriptlet%&gt;中服务方法的局部变量标签而不是&lt;%!声明%&gt;

只是想知道这段代码有什么意义?将参数转换为数字然后再返回?这是验证的一些尝试吗?对我来说,似乎有很多令人困惑的不必要的工作。特别是把它变成一个字符串。 如果它必须是一个整数,为什么你的标记不是一个整数? 或者自己进行验证?