2014-10-01 39 views
3

大家好,我正在與struts 2.x合作,並且對於這個框架非常新穎。我遵循教程和步驟列表以及我的應用程序正常工作,但有一件事對我來說並不清楚就像我在Action類中聲明一個專用字段並使用struts標記可以訪問jsp頁面的專用字段。那麼它是如何發生的,是不是可以理解爲我:在struts 2.x的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

你說的是什麼意思?你訪問有訪問者,獲取者或設置者。 – 2014-10-01 08:52:11

回答

2

Struts使用反射來找到一個返回該變量的方法。例如,如果您有一個名爲result的變量,則Struts將查找名爲getResult()的方法並調用它來獲取值。另外,如果你想讓屬性在JSP中可訪問,你必須確保你正確地命名這些方法。名爲「abc」的屬性將與方法getAbc()匹配(除非它是布爾值,在這種情況下,將與方法isAbc()相反)。

+0

我是新的struts編輯現在可用。 – Simmant 2014-10-01 07:52:22

+0

如何反思?因爲我知道它適用於類但在這裏JSP頁面訪問私人動作類的類。 – Simmant 2014-10-01 07:54:35

+0

@Bhagat反射可以繞過可達性修飾符。 – 2014-10-01 13:26:21

2

OGNL實際上並不要求訪問器存在,儘管這會因版本–早期版本(〜S2.0)所需的訪問器方法而有所不同。後來的版本(〜S2.1 +)「有用地」刪除了這個限制。

私人獲得者的公共財產也起作用,雖然它顯然是病態的。

IMO它是一個倒退的數據封裝。

它可能可以在OGNL的後期/當前版本中配置,我不確定。