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



嗨,我在Scriptlet标记中声明用户代理,但我无法访问声明性标记中的用户代理。我尝试了以下代码:

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

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

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

首先,您根本不需要声明性标记。去掉!,并确保在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信息页面(,因此您实际上不应该在JSP中定义函数。

最新更新