下面是详细的讲解:
概述
Struts2 是一个优秀的 Java Web 应用框架,它的表单标签库可以很方便地实现表单的输入和输出。但有时候,我们也需要一些特殊的操作,比如使用投影(projection)来显示指定的数据,此时,ognl 表达式就可以派上用场了。
步骤
1. 配置Struts2引用ognl
在 struts.xml
文件中配置如下:
<struts>
<!-- 配置ognl -->
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
<constant name="struts.ognl.excludedClasses" value="java.lang.*"/>
<!-- 其他配置 -->
...
</struts>
其中,allowStaticMethodAccess
设置为 true
,可以允许使用静态方法;另外一个配置 excludedClasses
指定排除被操作的对象中 java.lang 包下的所有类。
2. 在Action中设置变量
在对应的 Action 中设置需要显示的变量,例如:
package com.example.action;
import com.opensymphony.xwork2.ActionSupport;
public class DemoAction extends ActionSupport {
private String name = "Alice";
public String execute() {
return SUCCESS;
}
public String getName() {
return name;
}
}
其中,name
变量将在后面的投影中使用。
3. 在JSP页面中使用ognl表达式
在需要显示数据的位置,使用 ${variable.property} 或 %{expression}(%{expression} 包裹的表达式除了可以是一个对象的属性也可以是一个方法的返回值。)
例如,我们可以在 JSP 页面中使用以下的代码来显示 name
变量:
<p>${name}</p>
还可以使用 ognl 表达式实现该功能:
<p>%{#name}</p>
除此之外,我们还可以使用 ognl 表达式中的一些语法来进行投影操作,下面给出两个示例:
- 假设我们有一个字符串数组
names
:
private String[] names = {"Alice", "Bob", "Charlie", "Dave"};
我们可以使用 ognl 表达式 ${names.{? #this.length() == 3 }}
来投影出长度为 3 的字符串列表:
<p>${names}</p> <!-- 输出 ["Alice", "Bob", "Charlie", "Dave"] -->
<p>${names.{? #this.length() == 3 }}</p> <!-- 输出 ["Bob"] -->
- 假设我们有一个对象
user
,其中包含一个数字列表scores
,我们可以使用 ognl 表达式%{#user.scores.{^ #this < 60}}
来筛选出所有小于 60 分的成绩:
class User {
private List<Integer> scores = Arrays.asList(78, 82, 59, 91);
// getters and setters
}
<p>%{#user.scores}</p> <!-- 输出 [78, 82, 59, 91] -->
<p>%{#user.scores.{^ #this < 60}}</p> <!-- 输出 [59] -->
总结
通过以上步骤,我们可以使用 ognl 表达式来实现 Struts2 中的投影操作,使得我们可以更加灵活地处理表单数据。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Struts2 通过ognl表达式实现投影 - Python技术站