2014-09-12 20 views
1

您好我已經在Struts2中創建了一個動作類「MyClass」,我想在我的jsp文件中獲取它的實例變量「validationResult」,但是我得到了null另一個實例變量「version」正在填充。當我使用<s:iterator>標記顯示其內容時,它也顯示實例變量「validationResult」的內容。Struts2無法檢索包含的對象用作動作類中的屬性

Action類

package my.com; 
public class MyClass extends ActionSupport{ 
    private String version; 
    private List<VersionTO> validationResult; 

    @Override 
    public String execute() throws Exception { 
     validationResult=Arrays.asList(new VersionTO ("abc","def","ghi","jkl"), new VersionTO("mno","pqr","stu","vwx")); 
     version="212"; 
     return SUCCESS; 
    }  

    public String getVersion() { 
     return Version; 
    }  
    public void setVersion(String version) { 
     this.version = version; 
    }   
    public List<VersionTO> getValidationResult() { 
     return validationResult; 
    }  
    public void setValidationResult(List<VersionTO> validationResult) { 
     this.validationResult = validationResult; 
    } 
} 

pack my.be; 
public class VersionTO { 
    private String server; 
    private String version; 
    private String versionOn; 
    private String compared; 

    public VersionTO() { 
     super(); 
    } 

    public VersionTO(String server, String version, 
      String versionOn, String compared) { 
     this.server = server; 
     this.version = version; 
     this.versionOn = versionOn; 
     this.compared = compared; 
    } 

    public String getServer() { 
     return server; 
    }  
    public void setServer(String server) { 
     this.server = server; 
    }  
    public String getVersion() { 
     return version; 
    }  
    public void setVersion(String version) { 
     this.version = version; 
    }  
    public String getVersionOn() { 
     return versionOn; 
    }  
    public void setVersionOn(String versionOn) { 
     this.versionOn = versionOn; 
    }  
    public String getCompared() { 
     return compared; 
    }  
    public void setCompared(String compared) { 
     this.comparedVersion = compared; 
    }  
} 

JSP

<jsp:useBean id="ver" class="MyClass" scope="page"> 
    <jsp:setProperty name="ver" property="*" /> 
</jsp:useBean> 
<jsp:getProperty name="ver" property="vdVersion"/> <!--here i am getting proper output ie 212--> 
    <jsp:getProperty name="ver" property="validationResult"/> <!--here i am getting null in the output --> 
<% 
    if (ver.getValidationResult() != null && ver.getValidationResult().isEmpty()) { 
%> 
    <!-- logic for Presentation not working as each time I am getting null in validationResult --> 
<% 
    } 
%> 

<!-- working fine --> 
<s:iterator value="validationResult"> 
    <tr> 
     <td><s:property value="server" /></td> 
     <td><s:property value="version" /></td> 
     <td><s:property value="versionOn" /></td> 
     <td><s:property value="compared" /></td> 
    </tr> 
</s:iterator> 

回答

0

您需要設置一個默認的無參數Ç onstructor放在你的對象上,否則Struts2將無法實例化它。

public VersionTO() { 
    /* ... stuff ... eg set all to =""; */  
} 

public VersionTO(String server, String version, 
     String versionOn, String compared) { 
    /* ... stuff ... */ 
} 

Read the whole story


編輯

你並不需要所有這些標籤和操作...動作屬性已經在值棧。只需使用Struts標籤而不是JSP標籤和惡意腳本。

<jsp:useBean id="ver" class="MyClass" scope="page"> 
    <jsp:setProperty name="ver" property="*" /> 
</jsp:useBean> 
<jsp:getProperty name="ver" property="vdVersion"/> <!--here i am getting proper output ie 212--> 
    <jsp:getProperty name="ver" property="validationResult"/> <!--here i am getting null in the output --> 
<% 
    if (ver.getValidationResult() != null && ver.getValidationResult().isEmpty()) { 
%> 
    <!-- logic for Presentation not working as each time I am getting null in validationResult --> 
<% 
    } 
%> 

到:從把你的JSP

<s:property name="version"/> <!--WARNING ! In your Action class it is version... "vdVersion" may be a typo--> 
<s:if test=%{validationResult!=null"> 
    <!-- now the logic for Presentation will work, for example : --> 
    <s:iterator value="validationResult" status="stat"> 
     <tr> 
      <td><s:property value="server" /></td> 
      <td><s:textfield name="validationResult[%{#stat.index}].version" /></td> 
      <td><s:property value="versionOn" /></td> 
      <td><s:property value="compared" /></td> 
     </tr> 
    </s:iterator> 
</s:if> 
+0

感謝安德烈亞斯但我已經添加了一個默認的構造函數,但我忘了將它張貼 – user3291853 2014-09-12 14:09:29

+0

感謝@Andreas它的工作,但仍didnt得到了爲何** **標籤不工作? – user3291853 2014-09-15 08:54:53

+0

不確定,初始化問題我猜...不值得調查,只是使用正確的標籤 – 2014-09-15 09:03:46

相關問題