2013-02-12 50 views
1

我想從我的jsp訪問常量接口,但它顯示以下錯誤。如何從jsp訪問java接口

Caused by: tag 'select', field 'list', name 'title': 
The requested list key 'Constants.TITLE' 
could not be resolved as a collection/array/map/enumeration/iterator type. 
Example: people or people.{name} - [unknown location] 

我的界面

public interface Constants { 
    public List<String> TITLE = Arrays.asList("Mr","Mrs","Ms","Miss"); 
    // public String[] TITLE = {"MR","MRs"}; << does not work as well 
    //public static final String[] TITLE = {"MR","MRs"}; << does not work as well 
} 

我的JSP代碼

... 
<%@page import="com.myconstants.Constants" %> 
<head> 
</head> 
<body> 
    <s:form> 
    <s:select label="title" name="title" list="Constants.TITLE" value=" "/> 
    </s:form> 
.... 
+0

呃,請不要這樣做。把它放在一個類中,如果它真的很重要,就將它暴露爲一個靜態值。 – 2013-02-12 02:32:22

+1

@DaveNewton,我不明白你會給我一個例子嗎? – 2013-02-12 02:33:28

回答

2

使一個類。把這個清單放在一個班級中。正常使用OGNL靜態屬性訪問:

<s:select key="title" list="@[email protected]" /> 

像這樣做?可能不會;對I18Nize更難,難以在JSP中查找/重構用法(取決於IDE)。一般來說,我建議通過一個服務/圖層的行動暴露數據到視圖層。

+1

按服務/層您是指使用操作/控制器將數據發送到視圖?它是否會影響應用程序的性能,因爲它應該將請求發送到服務器並接收響應? – 2013-02-12 02:42:59

+0

我這樣做,它給出了相同的錯誤 – 2013-02-12 02:43:36

+0

@DanielMorgan對不起,我假設該常量實際上是一個常量(即公共靜態最終),這是OGNL **靜態**屬性訪問語法。我仍然不會那樣做,但如果你希望它是一個常數,那將是最合適的。但IMO在界面上的價值幾乎已經降至反模式狀態。 – 2013-02-12 02:46:54