如何从jsp访问java接口

如何从jsp访问java接口,java,jsp,struts2,Java,Jsp,Struts2,我试图从jsp访问常量接口,但它显示以下错误 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]

我试图从jsp访问常量接口,但它显示以下错误

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
}
公共接口常数{
public List TITLE=Arrays.asList(“Mr”、“Mrs”、“Ms”、“Miss”);

//公共字符串[]TITLE={“MR”,“MRs”};创建一个类。将列表放入一个类中。使用普通OGNL静态属性访问:

<s:select key="title" list="@some.package.Constants@TITLES" />


我会这样做吗?可能不会;I18Nize越难,在JSP中查找/重构用法就越难(取决于IDE)。一般来说,我建议通过操作中的服务/层将数据公开到视图层。

Ugh,请不要这样做。如果它真的很重要,请将其放入类中,并将其作为静态值公开。@DaveNewton,我不明白。你能给我举个例子吗?服务/层是指使用操作/控制器将数据发送到视图吗?不是是否影响应用程序的性能,因为它应该将请求发送到服务器并接收响应?@danielmonger抱歉,我假设该常量实际上是类中的常量(即publicstaticfinal)这就是OGNL静态属性访问语法所做的。我仍然不会这样做,但如果您希望将其作为常量,这将是最合适的。但是接口中的IMO值几乎已降级为反模式状态。您更喜欢的另一种方法是什么?您有这样的示例吗?@danielmorger我说的;expose它是从动作中提取出来的,或者创建一个可以更轻松地处理I18N的层。我想你可以创建一个静态方法来获取区域设置或其他内容。如果I18N不是一个问题,也许这无关紧要。@DanielMorgan避免使用笨拙的静态方法访问,避免依赖视图层直接从其源访问数据,以规范化数据的来源等。如我所说,这可能无关紧要。
<s:select key="title" list="@some.package.Constants@TITLES" />