我对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>
因为Spring MVC是基于请求的而不是基于组件的,所以我认为除非我在每个控制器方法中将LanguageBean
属性添加到每个Model
参数中,否则这种方法不起作用?
我非常感谢有关完成此任务的任何提示。
答案 0 :(得分:3)
如果您正在使用InternalResourceViewResolver
,那么您应该能够设置一个名为exposeContextBeansAsAttributes
的属性,该属性将您的bean公开为JSP可以直接访问的属性:
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="exposeContextBeansAsAttributes" value="true"/>
</bean>
因此,如果您的XML中的LanguageBean被指定为id="languagesSupportedBean"
,您可以使用其id直接在JSP中引用它:
<c:forEach items="${languagesSupportedBean.languagesSupported}" var="language">
${language}
</c:forEach>
因此不需要控制器或模型修改。
如果您在XML中声明您的LanguageBean,则不需要对其进行注释@Component
或者,如果你没有使用InternalResourceViewResolver
,你可以将你的LanguageBean注入你的控制器,然后使用注释@ModelAttribute
的方法公开它:
@ModelAttribute("languagesSupportedBean")
public LanguageBean getLanguageBean() {
return languageBean;
}
然后可以使用名称languagesSupportedBean
在JSP中访问它,并且可以减少在每个控制器方法中为每个模型设置bean的需要。
答案 1 :(得分:0)
将bean存储在会话中。您可以从JSP以相同的方式访问它。否则你可以扩展Model和@Autowire你在那里(不确定它是否会起作用)。