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

发布于 2022-09-05 23:09:09 字数 2829 浏览 15 评论 0

打算用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页面上**
    姓名:<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>

运行结果

图片描述

用student引用去访问的属性成功显示在了页面上,而我自己创建的stu引用却无法读取数据

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文