在我的项目中,我使用Velocity 1.7和Spring MVC 3.1。下面是源代码,显示了如何配置速度bean:
<bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
<property name="resourceLoaderPath" value="/WEB-INF/views/"/>
</bean>
<bean class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
<property name="contentType" value="UTF-8" />
<property name="prefix" value="" />
<property name="suffix" value=".vm" />
<property name="exposeSessionAttributes" value="true"/>
<property name="attributes">
<map>
<entry key="authentication">
<bean class="com.myapp.AuthenticatedUserDetails" />
</entry>
</map>
</property>
</bean>
我到处都使用UTF-8编码。当我在视图编码中有静态文本时,可以完美地工作。问题是当我想从我从模型传递的对象中显示我的.vm模板中的值时。
上面我将身份验证对象传递给每个速度模板。当我想在视图中使用身份验证对象时,例如显示authentication.username值我有一个编码问题 - 没有正确显示特殊字符。例如,在authentication.username里面有一个值'Rafał'但是当我将这个值传递给视图时,显示的值是'Rafa?'。
有人有类似的问题吗?我非常感谢你的帮助。
答案 0 :(得分:0)
这是速度模板代码:
#set ($username = $authentication.nameAndSurname)
<div id="menuBox">
<span class="loggedAsLabel">User <b>$!username</b></span>
</div>
以下是视图的返回方式:
@Controller
public class UserController extends BaseController {
@RequestMapping(value = "user-view")
public String returnView() {
return "user-view";
}
}
这是getNameAndSurname方法:
public String getNameAndSurname() throws UnsupportedEncodingException {
Object obj = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if (obj instanceof User) {
User user = (User) obj;
return user.getName() + ' ' + user.getSurname();
} else {
return null;
}
}
我知道这不是我从数据库中检索数据的问题,因为从另一个控制器我可以使用正确的UTF-8编码从DAO返回数据作为JSON响应。