Velocity 1.7中的UTF-8编码,用于从模型传递到视图的对象

时间:2013-08-03 15:08:11

标签: java spring encoding utf-8 velocity

在我的项目中,我使用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?'。

有人有类似的问题吗?我非常感谢你的帮助。

1 个答案:

答案 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响应。