从XML读取值并在JSP中显示它们

时间:2013-05-20 08:14:30

标签: spring jsp spring-mvc

我对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参数中,否则这种方法不起作用?

我非常感谢有关完成此任务的任何提示。

2 个答案:

答案 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你在那里(不确定它是否会起作用)。