2016-11-14 79 views
0

我有问题,在我的JSP访问模型属性(ProcessSolution),我没有收到什么是错我的以下代码:的Struts 2:无法访问模型属性在JSP

这是我的模型类ProcessSolution。 java的

package POJO; 

import java.util.Arrays; 

public class ProcessSolution { 
    private long processId; 
    private String processName; 
    private String processSolutionSteps []; 
    private String processRemark; 
    private String processNote; 

    public ProcessSolution() { 
     // TODO Auto-generated constructor stub 
    } 

    public ProcessSolution(long processId, String processName, 
      String[] processSolutionSteps, String processRemark, String processNote) { 
     this.processId = processId; 
     this.processName = processName; 
     this.processSolutionSteps = processSolutionSteps; 
     this.processRemark = processRemark; 
     this.processNote = processNote; 
    } 
    public long getProcessId() { 
     return processId; 
    } 
    public void setProcessId(long processId) { 
     this.processId = processId; 
    } 
    public String getProcessName() { 
     return processName; 
    } 
    public void setProcessName(String processName) { 
     this.processName = processName; 
    } 
    public String[] getProcessSolution() { 
     return processSolutionSteps; 
    } 
    public void setProcessSolution(String[] processSolutionSteps) { 
     this.processSolutionSteps = processSolutionSteps; 
    } 
    public String getProcessRemark() { 
     return processRemark; 
    } 
    public void setProcessRemark(String processRemark) { 
     this.processRemark = processRemark; 
    } 
    public String getProcessNote() { 
     return processNote; 
    } 
    public void setProcessNote(String processNote) { 
     this.processNote = processNote; 
    } 

    @Override 
    public String toString() { 
     return "ProcessSolution [processId=" + processId + ", processName=" 
       + processName + ", processSolutionSteps=" 
       + Arrays.toString(processSolutionSteps) + ", processRemark=" 
       + processRemark+ ", processNote=" + processNote + "]"; 
    } 
} 

这是我的Action类ProcessSolutionAction

public class ProcessSolutionAction extends ActionSupport implements Preparable, ModelDriven<ProcessSolution>, 
            SessionAware, ServletRequestAware, ServletContextAware{ 

    private static final long serialVersionUID = 1L; 

    private ProcessSolution processSolution; 
    private ProcessService processService; 
    private short opType; 
    private String nsec; 
    private UserClass user; 
    private Jmain jmain; 
    private ProcessSolution processSolutions[]; 

    private HttpServletRequest request; 
    private Map<String, Object> sesstion; 
    private ServletContext servletContext; 

    /* (non-Javadoc) 
    * @see com.opensymphony.xwork2.Preparable#prepare() 
    */ 
    @Override 
    public void prepare() throws Exception { 
     this.processSolution = new ProcessSolution(); 
     this.jmain = new Jmain(); 
    } 
    /*public void prepareAddProcessSolution() throws Exception { 
     this.processService = new ProcessService(); 
    } 
    public void prepareListProcessSolutions() throws Exception { 
     System.out.println("prepareListProcessSolution()"); 
     this.jmain = new Jmain(); 
    } 
    public void prepareEditProcessSolution() throws Exception { 
     System.out.println("prepareEditProcessSolution()"); 
     this.jmain = new Jmain(); 
    }*/ 

    @Override 
    public ProcessSolution getModel() { 
     return this.processSolution; 
    } 

    /* (non-Javadoc) 
    * @see com.opensymphony.xwork2.ActionSupport#execute() 
    */ 
    @Override 
    public String execute() throws Exception { 
     System.out.println("ProcessSolution#execute()"); 

     /*System.out.println("Process ID :- "+this.request.getParameter("processId")); 
     System.out.println("this.processSolution Before :- "+this.processSolution); 
     if(Long.parseLong(this.request.getParameter("processId")) != 0) 
      this.processSolution = this.jmain.getProcessSolution(Long.parseLong(this.request.getParameter("processId"))); 
     System.out.println("this.processSolution After :- "+this.processSolution);*/ 
     return SUCCESS; 
    } 

    public String editProcessSolution() throws Exception { 
     System.out.println("ProcessSolution#editProcessSolution()"); 

     System.out.println("Process ID :- "+this.request.getParameter("processId")); 
     System.out.println("this.processSolution Before :- "+this.processSolution); 
     if(Long.parseLong(this.request.getParameter("processId")) != 0) 
      setProcessSolution((ProcessSolution) this.jmain.getProcessSolution(Long.parseLong(this.request.getParameter("processId")))); 
     System.out.println("this.processSolution After :- "+this.processSolution); 
     return SUCCESS; 
    } 

    public ProcessSolution getProcessSolution() { 
     return processSolution; 
    } 
    public void setProcessSolution(ProcessSolution processSolution) { 
     this.processSolution = processSolution; 
    } 
    public short getOpType() { 
     return opType; 
    } 
    public void setOpType(short opType) { 
     this.opType = opType; 
    } 
    public String getNsec() { 
     return nsec; 
    } 
    public void setNsec(String nsec) { 
     this.nsec = nsec; 
    } 
    public UserClass getUser() { 
     return user; 
    } 
    public void setUser(UserClass user) { 
     this.user = user; 
    } 
    public ProcessSolution[] getProcessSolutions() { 
     return processSolutions; 
    } 
    public void setProcessSolutions(ProcessSolution[] processSolutions) { 
     this.processSolutions = processSolutions; 
    } 

    @Override 
    public void setServletRequest(HttpServletRequest request) { 
     this.request = request; 
    } 

    @Override 
    public void setSession(Map<String, Object> sesstion) { 
     this.sesstion = sesstion; 
    } 
    @Override 
    public void setServletContext(ServletContext servletContext) { 
     this.servletContext = servletContext; 
    } 
} 

在行动类的editProcessSolution()我能得到我的模型,并得到方法调用后正确打印无法访问JSP

这里我的模型类的属性是如何在JSP访问属性

<s:property value="%{[0].processName}" /> 
    <s:property value="%{[1].processName}" /> 
    <s:property value="processId" /> 
    <s:property value="nsec" /> 
    <s:property value="#processSolution.processName" /> 
    <s:property value="%{processSolution.processName}" /> 
    <s:property value="processSolution.processName" /> 
    <s:property value="%{processName}" /> 
    <s:property value="processRemark" /> 
    <s:property value="processNote" /> 
    <s:property value="processSolution.getProcessName()" /> 
    <s:property value="processSolution.getProcessId()" /> 
    <s:if test="%{processName == null}"> 
     NULL 
    </s:if> 
    <s:else> 
     NOT NULL 
    </s:else> 

我的代码有什么问题?

比你

更新代码

如果我用吸气访问我的模型,我能够访问模特属性

 <s:property value="getProcessSolution().getProcessName()" /> 

而是直接无法访问我的型号

这是我的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> 
    <constant name="struts.multipart.maxSixe" value="1000000"/> 

    <package name="shantaram" extends="struts-default"> 
     <!-- Process Solution Actions --> 
     <action name="load-process-solution" class="actions.ProcessSolutionAction"> 
      <result name="success">process_solution_entry.jsp</result> 
      <result name="error">Error.jsp</result> 
      <result name="login">Login.jsp</result> 
     </action> 
     <action name="list-process-solution" class="actions.ProcessSolutionAction" method="listProcessSolutions"> 
      <result name="success">process_solution_list.jsp</result> 
      <result name="error">Error.jsp</result> 
      <result name="login">Login.jsp</result> 
     </action> 
     <action name="add-process-solution" class="actions.ProcessSolutionAction" method="addProcessSolution"> 
      <result name="success">process_solution_entry.jsp</result> 
      <result name="error">Error.jsp</result> 
      <result name="login">Login.jsp</result> 
     </action> 
     <action name="edit-process-solution" class="actions.ProcessSolutionAction" method="editProcessSolution"> 
      <result name="success">process_solution_entry.jsp</result> 
      <result name="error">Error.jsp</result> 
      <result name="login">Login.jsp</result> 
     </action> 
     <action name="update-process-solution" class="actions.ProcessSolutionAction" method="addProcessSolution"> 
      <result name="success">process_solution_entry.jsp</result> 
      <result name="error">Error.jsp</result> 
      <result name="login">Login.jsp</result> 
     </action> 
     <action name="delete-process-solution" class="actions.ProcessSolutionAction" method="deleteProcessSolution"> 
      <result name="success">process_solution_list.jsp</result> 
      <result name="error">Error.jsp</result> 
      <result name="login">Login.jsp</result> 
     </action> 
    </package> 
</struts> 
+0

你可以发布你的struts.xml。我需要检查你的动作和拦截器 –

+0

从已实现的接口中删除'ModelDriven' –

+0

对不起,这是我的错误,在模型中,我有更多** getter ** getProcessSolution()'应该是'getProcessSolutionSteps() '我忘了重命名... –

回答

0

你需要你的行动你的结果类型更改为dispatchProcessSolutionActionstruts.xml中

样品:

<result name="success" type="dispatcher">sample.jsp</result> 

,或者您对您的结果中去除type因为类型的默认值是dispatcher

<result name="success">sample.jsp</result> 

也许你的结果类型为重定向这就是为什么你不能拿一个你的动作类的值给你的jsp。

+0

你是否确定你的语法? –

+0

这个语法给我错误.... –

+0

因为它是错误的;) –