0

我想检查是否在下拉菜单中选择了特定项目。假设我的 JSP 中有这样的内容:

<sf:select path="xItem" >
    <sf:option value="val1" />
    <sf:option value="val2" />
</sf:select>

在我相应的java bean中,我想将其检查为

if (xItem.equals("val1")) xItem = doSomething();

但是,如果我将“val1”定义为常量,即 ,final static String mytext="val1"并将我的 jsp 文件更改为<sf:option value="${MyClass.mytext}" />,Spring 会抱怨这mytext不是 MyClass 的属性。反正有没有将此文本定义为常量并在 JSP 和相应的 Java 类中引用它?

4

2 回答 2

1

${MyClass.mytext}表达式适用于 bean 和属性,特别是它意味着服务器期望找到一个保存在当前上下文中的MyClassbean 并在该 bean 上调用一个名为getMyText(它是 a jspContext.FindAttribute)的 getter,这不是这里的情况,因为你有一个类的静态成员。

以下是我想到的一些解决方法:

  • 使用 scriptlet 并引用静态成员(如果您可以在 JSP 中使用 scriptlet);
  • 将值保存在模型中某个键下的控制器中,并通过该键在 JSP 中引用它;
  • 定义一个自定义标签,给定一个类名和静态成员调用它并将它放在页面范围内的某个键下,您可以从那里使用 if(请参阅本文中的示例:无脚本 JSP 页面:常量常量惊吓);
  • 定义一个返回常量值的 EL 函数(请参阅同一篇文章Scriptless JSP Pages: The Constant Constants Consternation中的示例,滚动到它的末尾)。

如果您经常在 JSP 中引用常量,或者在控制器中的某个模型键下设置它(如果它是一次性使用),那么我个人会定义一个 EL 函数。

于 2012-09-30T17:05:29.200 回答
1

它不允许,因为它需要 getter setter 属性和 final 静态变量你不能有 setter,所以在这种情况下你必须删除 final static。

于 2012-09-21T13:04:58.573 回答