Java 无法从Struts 2标记内部访问scriptlet变量

Java 无法从Struts 2标记内部访问scriptlet变量,java,jsp,jakarta-ee,struts2,scriptlet,Java,Jsp,Jakarta Ee,Struts2,Scriptlet,我试图访问JSP中struts2s:if标记中的scriptlet变量 <% Website website = (Website)request.getAttribute(Website.NAME); out.println(website.isUkSite()); // prints true %> <s:if test="#website.isIrishSite()"> // this is returning false .... //这是假的 ..

我试图访问JSP中struts2
s:if
标记中的scriptlet变量

<%
Website website = (Website)request.getAttribute(Website.NAME);
out.println(website.isUkSite());  // prints true
 %>

<s:if test="#website.isIrishSite()">  // this is returning false 
....

//这是假的
....

实际上,这个
s:if
应该计算为
true
。问题是什么?

问题是在操作上下文中没有名为
website
的变量。为了让它工作,你可以使用

<%
Website website = (Website)request.getAttribute(Website.NAME);
out.println(website.isUkSite());  // prints true

ActionContext.getContext().put("website", website); 
 %>

但是scriplets是一个错误的选择,您可以删除此代码并使用

<s:if test="#request.website.isIrishSite()">

问题是在操作上下文中没有名为
网站的变量。为了让它工作,你可以使用

<%
Website website = (Website)request.getAttribute(Website.NAME);
out.println(website.isUkSite());  // prints true

ActionContext.getContext().put("website", website); 
 %>

但是scriplets是一个错误的选择,您可以删除此代码并使用

<s:if test="#request.website.isIrishSite()">

这终于奏效了

<%
Website website = (Website)request.getAttribute(Website.NAME);
out.println(website.isUkSite());  // prints true
 %>

<s:if test="website.ukSite">    
  // this is executed finally !!
</s:if>

//终于执行了!!
这终于奏效了

<%
Website website = (Website)request.getAttribute(Website.NAME);
out.println(website.isUkSite());  // prints true
 %>

<s:if test="website.ukSite">    
  // this is executed finally !!
</s:if>

//终于执行了!!

不要使用Scriptlet。不要使用Scriptlet。