0

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

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

4

1 回答 1

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

于 2013-08-05T17:23:07.940 回答