c:在scriptlet中设置

时间:2012-12-25 09:48:13

标签: jsp jstl scriplets

正在阅读Cookies并检查是否找到了特定的Cookie。如果找到特定Cookie,则将值设置为某个变量并将其用于进一步检查。以下是代码。

<%
        String showPacksCookie = "DisabledPackagesTab";
        Cookie[] cookielistTab = request.getCookies();

        if(cookielistTab != null)
          {
            for(int i = 0; i<cookielistTab.length; i++)
              {
                  Cookie cookie = cookielistTab[i];

                if(cookie.getName().contains(showPacksCookie) && cookie.getValue().equals("true"))
                {
                    <c:set var="showPackstab" value="display" scope="request" /> 
                  //Above is line 122
                    break;
                }
              }
        }
%>

<c:if test="${showPackstab eq 'display'}">
 <b>Tab</b><img src="/tabImage.gif" align="left" />
</c:if>

此代码抛出异常,

Syntax error, insert "AssignmentOperator Expression" to complete Assignment第122行

是否因为在Scriplet中使用JSTL而发生?如何摆脱这个问题?

1 个答案:

答案 0 :(得分:2)

scriptlet包含Java代码。 <c:set>不是有效的Java代码。 <c:set>做的是

request.setAttribute("showPackstab", "display");

所以这是你的scriptlet中应该有的代码。

但更重要的是,你根本不应该使用scriptlet。坚持使用EL,JSTL和其他自定义标签。如果逻辑太复杂而无法使用这些来表达,则表明它不属于视图(JSP),而是属于控制器(用Java编写的servlet或动作,在JSP之前调用,准备JSP的数据,并在数据准备就绪后转发到JSP。

这不是这种情况,因为以上所有内容都可以改写为:

<c:if test="${cookie.DisabledPackagesTab == 'true'}">
    <b>Tab</b><img src="/tabImage.gif" align="left" />
</c:if>