Struts2中OGNL语句访问普通属性无法取值

slowside45 2017-09-23 10:47:07
打算用Struts2实现一个读取数据并显示的小项目
Model:
Student类:

package OGNL;

public class Student {
private String name;
private int id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String say() {
return "调用方法成功";
}
}


Action类:

package OGNL;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class OGNLAction extends ActionSupport {

private static final long serialVersionUID = 1L;
private Student stu;
private String name;
Map<String,Object> request;
@SuppressWarnings("unchecked")
public OGNLAction() {
stu = new Student();
stu.setName("富贵");
stu.setId(1);
name = "Tom";
request = (Map<String, Object>) ActionContext.getContext().get("request");
}
public String execute() throws Exception{
request.put("info","request测试");
return SUCCESS;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Student getStudent() {
return this.stu;
}
public void setStudent(Student stu) {
this.stu = stu;

}
}


View:
ognl_index.jsp:


<body>
<a href="ognl.action">OGNL测试</a>
</body>


ognl_success.jsp

<body>
<div>

<h1>操作普通属性</h1>
属性name值:<s:property value="name"/>
<br><hr>
学号:<s:property value="stu.id"/><br>
//问题就出在这里,stu是我创建好了的引用,却无法显示在JSP页面上,把stu改成student后就可以显示了
姓名:<s:property value="student.name"/><br>
say()方法:<s:property value="student.say()"/> //而student这个引用名我从未创建过,却可以取值并显示在JSP页面上
<br><hr>
request中的info值:<s:property value="#request.info"/>
</div>
</body>



Controller:
struts.xml:

<constant name="strut.devMode" value="true"></constant>
<package name="myPackage" extends="struts-default" >
<!-- 定义action -->
<action name="ognl" class="OGNL.OGNLAction">
<result name="success">ognl_success.jsp</result>
</action>
</package>

运行结果:
...全文
209 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
孟子E章 2017-09-24
  • 打赏
  • 举报
回复
public Student getStudent() { return this.stu; } 应该写成 public Student getStu() { return this.stu; } 你定义的是 private Student stu;

10,606

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 其他
社区管理员
  • 其他
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧