大家好我每个人都使用struts 2.x而且这个框架非常新。我按照教程和步骤的列表和我的应用程序正常工作但有一件事我不清楚当我在我的动作类中声明一个私有字段并使用struts标记时,jsp页面可以访问私有字段。那么它如何发生对我来说是不可理解的:
struts.xml中
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="default" namespace="/home" extends="struts-default">
<action name="message" class="com.csc.action.MessageAction">
<result name="hello">/hello.jsp</result>
<result name="bye">/bye.jsp</result>
</action>
<action name="add" class="com.csc.action.Mathaction">
<result name="success">/hello.jsp</result>
<result name="fail">/bye.jsp</result>
</action>
</package>
</struts>
MessageAction.java
package com.csc.action;
import com.csc.service.BussniessServ;
public class MessageAction {
private String result;
private String value;
private String fstvalue;
private String scndvalue;
public String getFstvalue() {
return fstvalue;
}
public void setFstvalue(String fstvalue) {
this.fstvalue = fstvalue;
}
public String getScndvalue() {
return scndvalue;
}
public void setScndvalue(String scndvalue) {
this.scndvalue = scndvalue;
}
// method which get value from input parameter
public String getValue() {
return value;
}
// method which show the value of input parameter
public void setValue(String value) {
this.value = value;
}
// method which run as default and execute
public String execute() {
BussniessServ serv = new BussniessServ();
setMessag(serv.Addition(fstvalue, scndvalue));
return "hello";
}
// method to show message on jsp page
public String getResult() {
return result;
}
// method for save message
public void setResult(String result) {
this.result = result;
}
}
的Result.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<s:property value="result"/>
</body>
</html>
答案 0 :(得分:2)
Struts使用反射来查找返回该变量的方法。例如,如果您有一个名为result
的变量,那么Struts会查找名为getResult()
的方法并调用它来获取值。
此外,如果您希望在JSP中可以访问属性,则必须确保正确命名这些方法。一个名为&#34; abc&#34;将匹配方法getAbc()(除非它是布尔值,在这种情况下将匹配方法isAbc())。
答案 1 :(得分:2)
OGNL实际上并不需要存在访问器,尽管这因版本较早版本(~S2.0)所需的访问器方法而异。后来的版本(~S2.1 +)“帮助”删除了这个限制。
使用私有getter的公共属性也有效,尽管它显然是病态的。
IMO这是数据封装的倒退。
它可以在OGNL的后期/当前版本中配置,我不确定。