如何在Velocity Template中访问Session或Request对象

时间:2012-08-23 02:56:29

标签: java spring-mvc velocity

我试图在某个速度模板中访问HttpServletRequest,但从未成功。 我已经尝试过以下语法风格

当前网址:$ req.get(“attributes”)。get(“CURRENT_URL”)) 结果>当前网址:$ req.get(“attributes”)。get(“CURRENT_URL”))

当前网址:$ request.get(“attributes”)。get(“CURRENT_URL”)) 结果>当前网址:$ request.get(“attributes”)。get(“CURRENT_URL”))

当前网址:$ request.get(“attributes”)。get(“CURRENT_URL”)) 结果>当前网址:$ request.get(“attributes”)。get(“CURRENT_URL”))

当前网址:$ {request.get(“attributes”)。get(“CURRENT_URL”))} 结果>当前网址:$ {request.get(“attributes”)。get(“CURRENT_URL”))}

注意:Web.xml看起来像

<!-- Processes application requests -->
<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

<!-- Define Velocity template compiler -->
<servlet>
  <servlet-name>velocity</servlet-name>
  <servlet-class>
    org.apache.velocity.tools.view.servlet.VelocityViewServlet
  </servlet-class>

  <!-- 
   Unless you plan to put your toolbox.xml and velocity.properties
   under different folders or give them different names, then these
   two init-params are unnecessary as of VelocityTools 1.3.  The
   VelocityViewServlet will automatically look for these files in
   the following locations.
 -->
  <init-param>
    <param-name>org.apache.velocity.toolbox</param-name>
    <param-value>/WEB-INF/toolbox.xml</param-value>
  </init-param>

  <init-param>
    <param-name>org.apache.velocity.properties</param-name>
    <param-value>/WEB-INF/velocity.properties</param-value>
  </init-param>
</servlet>

<!-- Map *.vm files to Velocity -->
<servlet-mapping>
  <servlet-name>velocity</servlet-name>
  <url-pattern>*.vm</url-pattern>
</servlet-mapping>

6 个答案:

答案 0 :(得分:5)

$的request.getParameter( “参数名称”)

答案 1 :(得分:3)

对于VelocityTools,正确的引用是$ request和$ response,而不是$ req和$ res

方法名称是getAttribute,而不是get。所以你可以这样做:

$ request.getAttribute( '富')

或只是$ request.foo

但不是$ request.get('foo')

答案 2 :(得分:2)

默认情况下,您无法在Velocity模板中访问HttpServletRequest;您只能访问已放入Context的对象。因此,在支持Java类中,将所需的信息添加到conext:

context.put("url", request.getAttribute("CURRENT_URL"));

然后在Velocity模板中,您只需引用$url

答案 3 :(得分:0)

您需要根据会话推出自己的课程才能正确执行此操作。

我立即遇到了这个问题,现在我要创建一个会话类,我将通过values属性作为HashMaps列表访问。

然后,您需要做的就是在使用前将值分配给速度一次。

context.put("session", MySessionClass.values));

答案 4 :(得分:0)

获取特定参数:

$!request.getParameter('parameterName')

获取整个查询字符串:

$!request.getQueryString()

答案 5 :(得分:0)

试试这个

$request.getSession().getAttribute('userId')