Velocity笔记--使用Velocity获取动态Web项目名的问题

  以前使用jsp开发的时候,可以通过request很轻松的获取到根项目名,现在换到使用velocity渲染视图,因为已经不依赖servlet,request等一些类的环境,而Web项目的根项目名又不是写死的,需要动态获取,这时候该怎么办呢,试了网上说了很多种方式,总结一下心得.

第一种:(失败)

  在toolbox.xml里配置以下信息:

    <toolbox scope="request">  
          <tool key="link" class="org.apache.velocity.tools.view.LinkTool"/>
    </toolbox>

  然后在.vm里直接引用$link.contextPath

  我依照这种方式配置完成,启动浏览器打开项目的时候,页面什么都刷不出来,按道理说如果它读不到LinkTool的话,也应该在页面中直接输出$link.contextPath的呀,然后我在vm中去掉$link.contextPath,重新部署就可以刷出来页面,我猜测可能是在读toolbox.xml类的时候出了问题,然后在toolbox.xml中加入了一个自己写的工具类测试:

   <tool>
        <key>MyUtil</key>
        <class>com.ximalaya.shop.api.util.MyUtil</class>
        <scope>application</scope>
    </tool>

MyUtil类中有一个最简单的静态方法getMessage(),返回"test",然后我在vm中使用$MyUtil.message,测试.浏览器页面成功返回test...看来不是读取toolbox.xml的问题,debug了一下的确能进到LinkTool方法里,但是值总是为空,鼓捣了半天没有解决,第一种方法,失败!

第二种:(成功)

  在spring配置文件的配viewResolver的地方添加一个参数:

 <!--配置试图解析器-->
    <bean id="viewResolver"
          class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
        <property name="cache" value="false"/>
        <property name="prefix" value=""/>
        <property name="suffix" value=".vm"/>
        <property name="requestContextAttribute" value="rc"/>
        <property name="contentType" value="text/html;charset=utf-8"/>
        <property name="toolboxConfigLocation" value="/WEB-INF/toolbox.xml"/>
        <property name="exposeSpringMacroHelpers" value="true"/>
        <property name="exposeRequestAttributes" value="true"/>
        <property name="exposeSessionAttributes" value="true"/>
        <property name="allowSessionOverride" value="true"/>
        <property name="allowRequestOverride" value="true"/>
    </bean>

在vm文件中,直接使用$rc.contextPath可获得项目名.

  "requestContextAttribute" 把Spring的RequestContext对象暴露为变量rc。利用$rc.contextPath来获取应用程序的contextPath(也 就是/MyUsers);利用${rc.getMessage("user.name")}读取/WEB- INF/classes/messages.properties本地化信息。此对象对于那些不访问serlvet请求的View技术(也就是 Velocity和FreeMarker模板)来说是必不可少的。

时间: 2024-10-23 11:12:59

Velocity笔记--使用Velocity获取动态Web项目名的问题的相关文章

获取SilverLight.Web项目中路径Uri

方法一: //获取指定要呈现的xaml内容的包活xaml文件Uri var strFullUrl = Application.Current.Host.Source.AbsoluteUri; if (strFullUrl.IndexOf("ClientBin") > 0) { var uristr = strFullUrl.Substring(0, strFullUrl.IndexOf("ClientBin")) + "Report/Default.

搭建Dynamic Web Project(动态web项目)的springmvc工程2

本文转载自:http://blog.csdn.net/typa01_kk/article/details/45905129 此篇为“创建Dynamic Web Projec工程,”搭建Dynamic Web Project(动态web项目)的springmvc工程1的续篇,“搭建springmvc框架web项目”: 注:开发工具,以及jar包下载,404访问处理,请到上篇或下链接!!! 下载分享%springmvc开发分享****,(提取码:2c4a)也可网上下载,适合自己的或最新版本使用. 4

搭建Dynamic Web Project(动态web项目)的springmvc工程1

本文转载自:http://blog.csdn.net/typa01_kk/article/details/45902955 此篇创建Dynamic Web Projec工程(动态web项目),下一篇,搭建Dynamic Web Project(动态web项目)的springmvc工程2,搭建springmvc. 404错误解决可以查看:springmvc下404解决 工具: jdk:jdk-8u45-windows-x64.exe 服务器:apache-tomcat-8.0.22 eclipse

Eclipse创建一个 Maven 动态web项目

今天需要将一个Maven项目改成一个Maven 动态web项目,在网上找到一个解决方案,自己动手做了一遍,完美的解决了自己的难题,在这贴出链接, 以便以后使用: http://www.cnblogs.com/noteless/p/5213075.html 感谢博主的热情分享.

创建一个动态Web项目:

开始你的Eclipse,然后进入"文件">"新建">"动态Web项目,然后输入项目名称为HelloWorldStruts2和设置其他的选项,在下面的屏幕: 选择在屏幕上的所有默认选项,最后检查生成的web.xml部署描述符选项.这将创建一个动态Web项目在Eclipse中.现在去窗口>显示视图>项目资源管理器,你会看到你的项目窗口中的东西如下: 现在复制以下文件从Struts 2的lib文件夹C:\struts-2.2.3\lib添

IDEA 创建 动态 Web 项目的正确姿势

打开 IDEA,点击 Create New Project 左侧选中Java Enterprise, Java EE version 下拉框选择 Java 7 解释一下,这里选择 Java 7 是为了解决一个 IDEA 在创建动态 Web 项目流程上的小 Bug. 左侧选中 Java,然后再选中回 Java Enterprise,Java EE version 下拉框选择 Java 8,选择项目其他相应信息 如果没有上面切换 Java EE version 的操作,那么这一步在选中 Web Ap

Eclipse动态Web项目导入到IDEA中

对于Web动态项目,不同于以往的静态项目,直接Open即可,需要以下步骤. (PS:对于动态web项目,不可像静态tomcat那样部署) import projec create projec from exiting source next-next-next-next 创建Artifacts 菜单-> File -> Project Structure -> Artifacts -> 加号 -> Web Application Exploded -> from Mo

Eclipse里的web项目名有红叉,但是底下的每一个文件都没有红叉解决方法

问题描述:Eclipse里的web项目名有红叉,但是底下的每一个文件都没有红叉? 原       因:原因其实很多,这里我只记录我出错原因:是因为用了Eclipse自带的basic下面的服务器,然后就出错了. 解决方法:重新new一个Apache(tomcat)服务,成功解决. 操作:点击服务-->右键--->点击 new-->点击 Server-->选择Apache下的你有的tomcat(需要自己下载)-->点击finish .完成 具体如图:

复制web项目时注意修改web项目名

改web项目的项目名可以右击->properties->搜索web找到settings->修改context name