Struts2 не может получить содержащийся объект, используемый в качестве атрибута в классе действий

Привет, Я создал класс действий "MyClass" в Struts2, и я хочу получить его переменную экземпляра "validationResult" в моем jsp файле, но я получаю нуль, хотя заполняется другая переменная "version". Когда я показываю их содержимое, используя Тег отображает содержимое переменной экземпляра "validationResult".

Класс действия

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;
 }
}
</versionto></versionto></versionto>

боб

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" scope="page">
 </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">
 
 <s:property value="server">
 <s:property value="version">
 <s:property value="versionOn">
 <s:property value="compared">
 
</s:property></s:property></s:property></s:property></s:iterator>
</jsp:getproperty></jsp:getproperty>
1 ответ

Вам нужно установить конструктор args по умолчанию для вашего объекта, иначе Struts2 не сможет его создать.

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

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

Прочтите всю историю

РЕДАКТИРОВАТЬ

Вам не нужны все те теги и операции... атрибуты действия уже находятся в ValueStack. Просто используйте теги Struts вместо JSP-тегов и злых скриптлетов. Превратите свой JSP из:

<jsp:usebean id="ver" scope="page">
 </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:getproperty></jsp:getproperty>

в:

<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">
 
 <s:property value="server">
 <s:textfield name="validationResult[%{#stat.index}].version">
 <s:property value="versionOn">
 <s:property value="compared">
 
 </s:property></s:property></s:textfield></s:property></s:iterator>
</s:if>
</s:property>

licensed under cc by-sa 3.0 with attribution.