【问题标题】:How to access a java interface from jsp如何从jsp访问java接口
【发布时间】:2013-02-12 02:24:59
【问题描述】:

我正在尝试从我的 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
}

我的 Jsp 代码

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

【问题讨论】:

  • 呃,请不要这样做。将其放入一个类中,如果它真的很重要,则将其公开为静态值。
  • @DaveNewton,我不明白你能给我举个例子吗?

标签: java jsp struts2


【解决方案1】:

上课。将列表放在一个类中。使用普通的 OGNL 静态属性访问:

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

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

【讨论】:

  • 服务/层是指使用动作/控制器将数据发送到视图?它不会影响应用程序的性能,因为它应该将请求发送到服务器并接收响应?
  • @DanielMorgan 抱歉,我认为常量实际上是类中的常量(即 public static final),这就是 OGNL static 属性访问语法所做的。我仍然不会这样做那样,但如果您希望它作为常数,那将是最合适的。但是接口中的 IMO 值几乎已被降级为反模式状态。
  • 你喜欢的其他方法有什么例子吗?
  • @DanielMorgan 我说了什么;将其作为动作中的某些内容公开或创建一个可以更轻松地处理 I18N 的层。我想你可以制作一个采用语言环境或其他东西的静态方法。如果 I18N 不是问题,也许没关系。
  • @DanielMorgan 为了避免使用笨拙的静态方法访问,避免依赖视图层直接从其源访问数据,规范数据的来源等。就像我说的,它可能没关系。
猜你喜欢
  • 2016-09-20
  • 2018-03-13
  • 1970-01-01
  • 1970-01-01
  • 2017-06-21
  • 1970-01-01
  • 2011-09-28
  • 1970-01-01
  • 2020-02-14
相关资源
最近更新 更多