2012-12-25 32 views
0

在讀取Cookies並檢查是否找到了特定的Cookie。如果找到特定的Cookie,那麼將值設置爲某個變量並將其用於進一步檢查。以下是代碼。c:在scriplet中設置

<% 
     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?如何擺脫這個問題?

回答

2

scriptlets包含Java代碼。 <c:set>是無效的Java代碼。什麼<c:set>確實是

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

因此,這是你應該在你的小腳本代碼。

但更重要的是,你根本不應該使用scriptlets。堅持EL,JSTL和其他自定義標籤。如果邏輯太複雜而無法用這些表達式表示,那麼它就表明它不屬於視圖(JSP),而是屬於控制器(在JSP之前調用的用Java編寫的servlet或動作,它準備JSP的數據,並在數據準備好後轉發給JSP)。

這不是這裏的情況,因爲所有的上述可改寫爲:

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

'request.setAttribute..'完美的作品。你建議堅持EL並給出了代碼。但是,'cookie'的範圍僅限於'for'循環。你不覺得'$ {cookie.DisabledPackagesTab =='true'}'在Scriplet之外無效嗎? –

+1

腳本包含Java代碼。不是JSP標籤。不是JSP EL代碼。 $ {cookie.DisabledPackagesTab}的意思是*「名爲'DisabledPackagesTab'*的cookie的值。它不需要任何scriptlet或for循環來工作,因爲它會通過cookie循環,找到名爲'DisabledPackagesTab'的文件並返回其值。 –

+0

+1對於'$ {cookie.DisabledPackagesTab}' –