0

私は JSF の経験がありますが、Spring MVC を学びたいと思っています。Web サイトの表示言語を変更するオプションをユーザーに表示したいと考えています。これを実現するには、言語を 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すべてのパラメーターに as 属性を追加しない限り、このアプローチは機能しないと思います。Model

これを達成するためのヒントをいただければ幸いです。

4

2 に答える 2

3

を使用している場合は、Bean を JSP が直接アクセスできる属性として公開するInternalResourceViewResolverというプロパティを設定できるはずです。exposeContextBeansAsAttributes

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

そのため、LanguageBean がid="languagesSupportedBean"XML のように指定されている場合、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;
}

これは、名前を使用して JSP でアクセスでき、languagesSupportedBeanすべてのコントローラー メソッドのすべてのモデルで Bean を設定する必要性を軽減します。

于 2013-05-20T14:11:43.010 に答える