我正在使用常规Servlet将Java Web应用程序迁移到Struts2 Actions。
我似乎无法使用JSTL标记访问JSP上的Action对象。标签在迁移之前正常工作,但现在它们只显示变量名称。但是,我可以使用Struts2标签访问该对象,所以我不确定JSTL的问题是什么。
我的行动有以下对象:
private String prueba = "hola";
public String getPrueba() {
return prueba;
}
public void setPrueba(String prueba) {
this.prueba = prueba;
}
在JPS上:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
此标记在屏幕上显示“$ {prueba}”。
<c:out value="${prueba}" />
虽然此标签正确显示“hola”。
<s:property value="prueba"/>
我的类路径上有最新版本的JSTL库,控制台上没有显示错误,所以我不确定是什么问题。我是否需要在struts.xml,web.xml或我的Action类上配置其他内容?
提前致谢。
更新
我的struts.xml
<struts><!-- Configuration for the default package. -->
<package name="default" namespace="/" extends="struts-default">
<action name="listaAutos"
class="com.neoris.training.lab.autos.negocios.AutomovilServlet"
method="service">
<result name="success">/listaautos.jsp</result>
</action>
</package>
</struts>
我的web.xml
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>Team1PrjStruts</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
答案 0 :(得分:1)
<强>更新强>
您还可以确保在类路径中有jstl-xx.jar吗?
Why can't I use JSTL-style EL expressions in Struts tags?
从Struts版本2.0.9开始,JSTL / JSP表达式语言(EL)具有 已被禁用的Struts标记属性评估OGNL。这是一个 预防可能导致的安全漏洞 首次处理属性时发生的双重评估 一个JSTL / JSP EL表达式,然后将结果作为OGNL处理 表达。解决方案是表达所有动态属性值 Struts标签直接使用OGNL表达式。
http://struts.apache.org/release/2.3.x/docs/using-struts-and-xwork-with-jsp-20-and-jstl-11.html
但你可以试试这个:
http://struts.apache.org/release/2.3.x/docs/using-struts-and-xwork-with-jsp-20-and-jstl-11.html
答案 1 :(得分:1)
尝试<c:out value="${action.prueba}" />
或仅${action.prueba}
答案 2 :(得分:0)
根据所有Struts2请求都被重新包装在StrutsRequestWrapper
中的事实(并且getAttribute
方法被重载,使用ValueStack来搜索变量/属性,如果使用普通的JSTL EL方式找不到的话) - 在JSP中使用${prueba}
只能很好地工作。