0

我对 JSF 有一些经验,但我现在想学习一些 Spring MVC。我希望向用户显示选项以更改我的网站显示的语言。为此,我想在 XML 中定义语言并将它们设置在 bean 中,然后在 JSP 中遍历该列表以显示语言选项给用户。

这就是我的 XML 的样子:

<bean id="languagesSupportedBean" class="be.maxcorp.Util.LanguageBean">
    <property name="languagesSupported">
        <array>
            <value>en</value>
            <value>nl</value>
        </array>
    </property>
</bean>

这是我的LanguagesSupportedBean课:

@Component
public class LanguageBean {
    public String[] languagesSupported;

    public String[] getLanguagesSupported() {
        return languagesSupported;
    }

    public void setLanguagesSupported(String[] languagesSupported) {
        this.languagesSupported = languagesSupported;
    }
}

在我的 JSP 中,我想做这样的事情:

<c:forEach items="${languageBean.LanguagesSupported}" var="language">
    ${language}
</c:forEach>

LanguageBean因为 Spring MVC 是基于请求的而不是基于组件的,所以我认为除非我将as 属性添加到Model每个控制器方法中的每个参数,否则这种方法将不起作用?

我将不胜感激有关完成此任务的任何提示。

4

2 回答 2

3

如果您使用的是,InternalResourceViewResolver您应该能够设置一个名为的属性exposeContextBeansAsAttributes,它将您的 bean 公开为 JSP 可以直接访问的属性:

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="exposeContextBeansAsAttributes" value="true"/>
</bean>

因此,如果您的 LanguageBeanid="languagesSupportedBean"在您的 XML 中指定,您可以使用它的 id 在您的 JSP 中直接引用它:

<c:forEach items="${languagesSupportedBean.languagesSupported}" var="language">
    ${language}
</c:forEach>

所以不需要控制器或模型修改。

如果您在 XML 中声明 LanguageBean,那么您不需要注释它@Component

或者,如果您不使用InternalResourceViewResolver,您可以将 LanguageBean 注入您的控制器,然后使用 annotated 方法公开它@ModelAttribute

@ModelAttribute("languagesSupportedBean")
public LanguageBean getLanguageBean() {
    return languageBean;
}

然后可以在您的 JSP 中使用该名称访问该名称languagesSupportedBean,并减少在每个控制器方法中的每个模型上设置 bean 的需要。

于 2013-05-20T14:11:43.010 回答
0

将 bean 存储在会话中。您可以从 JSP 以相同的方式访问它。否则,您可以扩展 Model 和 @Autowire 您去过那里(不确定它会起作用)。

于 2013-05-20T08:36:34.757 回答