2016-11-14 80 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

因爲它是錯誤的;) –