从Scriptlet标记到JSP中的声明标记的变量访问

时间:2014-05-07 13:34:36

标签: jsp scriptlet

您好我在Scriptlet标记中声明用户代理,我无法在声明性标记中访问该用户代理我尝试了以下代码:

<%
    String ua = request.getHeader( "User-Agent" );
    boolean isSafari=(ua != null && ua.indexOf("Safari") != -1);
%>

我在声明标记中访问此isSafari,如<%! if(isSafari){} %>

在这里,我可以获得浏览器的用户代理 但是当我在声明性标签中使用它时,它表示找不到变量isSafari,请声明。

1 个答案:

答案 0 :(得分:0)

首先,您根本不需要声明性标记。摆脱!并确保在if语句的{}中放置一些东西,它会正常工作。

 <%
 String ua = request.getHeader( "User-Agent" ); 
 boolean isSafari=( ua != null && ua.indexOf( "Safari" ) != -1 );
 %> 
 blah blah blah
 <% if(isSafari){ %>
 some html code here
 <% } %>
 or
 <% if(isSafari)
 {
    out.print("some html code");
 }
 %>

其次,顾名思义,声明性标记的目的是声明事物,而不是使用它们。所以你可以做到这一点

 <%!
 String ua = null;
 boolean isSafari = false; 
 %> 
 blah blah blah
 <%
   ua = request.getHeader( "User-Agent" ); 
   isSafari = ( ua != null && ua.indexOf( "Safari" ) != -1 );
   if(isSafari)
   {
     out.print("some html code");
   }
 %>

实际上,大多数情况下,声明性标签将用于声明函数。但是现在不建议在JSP中添加一堆代码(参见JSP info page),所以你真的不应该在JSP中定义函数。