使用JSTL访问Struts2 Action

时间:2014-01-08 20:30:06

标签: java struts2 jstl

我正在使用常规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>

3 个答案:

答案 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}只能很好地工作。