2013-05-20 68 views
0

我對JSF有一些經驗,但我現在想學習一些Spring MVC。我希望向用戶顯示選項,以更改我的網站顯示的語言。爲了實現這一點,我想用XML定義語言並將它們設置爲一個bean,然後在JSP中遍歷該列表以顯示語言選項給用戶。從XML中讀取值並在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是基於請求的,而不是基於組件的,我想這種方法是行不通的,除非我添加在每個控制器方法中,每個Model參數都有LanguageBean作爲屬性?

我非常感謝您完成此任務的任何提示。

回答

3

如果您使用的是InternalResourceViewResolver你應該能夠在屬性是JSP可以直接訪問設置一個名爲exposeContextBeansAsAttributes屬性,會暴露你的bean:

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

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

<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在每個控制器方法每個模型。

+0

我使用'TilesViewResolver',所以我不認爲我可以設置該屬性。 – Mekswoll

+0

我打算接受這個答案,因爲我沒有在問題中指明我正在使用Tiles3,如果我使用了'InternalViewResolver',這個答案就可以工作。 Tiles3的答案可以在這裏找到http://stackoverflow.com/questions/2848415/accessing-spring-beans-from-a-tiles-view-jsp – Mekswoll

+0

@Mekswoll - 很高興你找到答案。我用另一個可能的選擇更新了這個問題。 –

0

在會話中存儲bean。您可以從JSP以相同的方式訪問它。否則,你可以擴展模型和@Autowire你在那裏(不知道它會工作)。

+0

我一直試圖將它存儲在會話中,但由於某種原因,它不工作。 – Mekswoll

+0

http://raibledesigns.com/rd/entry/spring_mvc_jstlview_and_exposecontextbeansasattributes –

相關問題