2014-04-12 1 views
0

이 문제가 있으며 결과가 없으면 정말 미쳐 가고 있습니다. validator.xml을 통해 모든 필드가 필요합니다. 내 양식에 업로드 이미지 필드가 포함되어 있습니다 (필수) 제출 버튼을 클릭하면 대기중인 페이지가 표시됩니다 (struts.xml에 구성된 execAndWait). 내 큰 문제는 다음과 같습니다. 대기중인 페이지는 항상 텍스트가있는 양식 페이지로 리디렉션됩니다 (파일 필드 및 필수).Struts2 execAndWait 및 파일 업로드 작업이 없습니다.

/register.jsp

<!-- al submit chiama l'action register --> 
<action name="register" class="action.Register" method="execute" > 

<interceptor-ref name="defaultStack" /> 

<interceptor-ref name="fileUpload"> 
      <param name="maximumSize">10000000</param> 
      <param name="allowedTypes">image/jpeg,image/gif,image/jpg</param> 

</interceptor-ref> 

    <interceptor-ref name="params"></interceptor-ref> 
    <interceptor-ref name="execAndWait"> 
    </interceptor-ref>   
    <result name="success">index.jsp</result> 
    <result name="input">/register.jsp</result> 
    <result name="wait">/test.jsp</result> 
</action> 

대기 페이지 :

<meta http-equiv="refresh" content="5;url=<s:url includeParams="all" />"/> 
</head> 
<body> 

<p>your request is processing...</p> 
<img src="images/indicator.gif"/> 

내 양식 :

<s:form method="post" action="register" validate="false" enctype="multipart/form-data"> 
      <s:textfield key="utenteBean.nome" name="utenteBean.nome" value="a" /> 
      <s:textfield key="utenteBean.nickname" name="utenteBean.nickname" value="a" /> 
      <sj:datepicker key="utenteBean.nato" name="utenteBean.nato" 
       showButtonPanel="true" displayFormat="dd/mm/yy" value="25/09/1983"/> 
      <s:textfield key="utenteBean.professione" name="utenteBean.professione" value="a"/> 
      <s:textfield key="utenteBean.eta" name="utenteBean.eta" value="3"/> 
      <s:textfield key="utenteBean.dj_preferito" name="utenteBean.dj_preferito" value="a" /> 
      <s:textfield key="utenteBean.rave_fatti" name="utenteBean.rave_fatti" value="3" /> 
      <s:textfield key="utenteBean.sito_preferito" name="utenteBean.sito_preferito" value="a" /> 
      <s:textfield key="utenteBean.come_siveste" name="utenteBean.come_siveste" value="a" /> 
      <s:textarea key="utenteBean.messaggio" name="utenteBean.messaggio" value="a"/> 
      <s:file label="file" name="file" requiredLabel="true"" ></s:file> 

enter image description here여기 코드입니다enter image description here enter image description here

정말 감사 당신의 도움이

답변

0

위해 난 당신이 file tag에 대한 잘못된 필드 이름을 넣어했다고 가정합니다. 당신의 행동 수업을 보여줄 수 있습니까?

<s:file label="file" name="file" requiredLabel="true"" ></s:file> 

시도 사용 :

<s:file label="file" name="utenteBean.file" requiredLabel="true"" ></s:file> 

를하거나 액션 클래스의 파일 속성의 이름을 확인하는 대신 것과 관련하여.

+0

내 행동 코드를 입력했습니다. 내가 너를 대단히 감사하게 도울 수 있기를 바랍니다. – Diego

0

예 확인 ... 내 Action 클래스 아래 :

공용 클래스 등록은 ...

ActionSupport를가

이 도와 주셔서 너무 감사 SessionAware {

/** 
* 
*/ 
private static final long serialVersionUID = 1L; 

private UtenteBeanAction utenteBean; 

private File file; 
private String fileContentType; 
private String fileFileName; 
private String filesPath; 
private ServletContext context; 
Map<String, Object> session; 


public String execute(){ 

    if (file != null) { 
     File file = this.file; 
     // /System.out.println(file.getName()); 
     try { 
      Util.saveFile(file, fileFileName); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      return ERROR; 
     } 
    } else { 
     return ERROR; 
    } 
    return SUCCESS; 
} 



public void validate(){ 

    if(this.fileFileName==null){ 
     this.addFieldError("file", "errore"); 
    } 
} 


public UtenteBeanAction getUtenteBean() { 
    return utenteBean; 
} 

public void setUtenteBean(UtenteBeanAction utenteBean) { 
    this.utenteBean = utenteBean; 
} 


public File getFile() { 
    return file; 
} 

public void setFile(File file) { 
    this.file = file; 
} 

public String getFileContentType() { 
    return fileContentType; 
} 

public void setFileContentType(String fileContentType) { 
    this.fileContentType = fileContentType; 
} 

public String getFileFileName() { 
    return fileFileName; 
} 

public void setFileFileName(String fileFileName) { 
    this.fileFileName = fileFileName; 
} 

public String getFilesPath() { 
    return filesPath; 
} 

public void setFilesPath(String filesPath) { 
    this.filesPath = filesPath; 
} 

public ServletContext getContext() { 
    return context; 
} 

public void setContext(ServletContext context) { 
    this.context = context; 
} 

@Override 
public void setSession(Map<String, Object> session) { 
    // TODO Auto-generated method stub 

    this.session=session; 


} 

}를 구현 확장

0

세션에서 콩을 넣어 해결했습니다. 많은 시간 동안 일하면서 더 나은 해결책을 찾을 수 없었습니다. 다른 사람들이 똑같은 문제를 겪고 있다면 나는 나의 변화를 볼 수 있습니다. 액션

package action; 



import java.io.File; 
import java.io.IOException; 
import java.util.Map; 

import javax.servlet.ServletContext; 

import org.apache.struts2.ServletActionContext; 
import org.apache.struts2.interceptor.SessionAware; 

import Bean.UtenteBeanAction; 

import com.opensymphony.xwork2.ActionContext; 
import com.opensymphony.xwork2.ActionSupport; 

import Utility.Util; 


public class Register extends ActionSupport implements SessionAware { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    private UtenteBeanAction utenteBean; 


    private ServletContext context; 
    Map<String, Object> session; 


    public String execute(){ 


     session.put("utente", utenteBean); 
     if (utenteBean.getFile() != null) { 
      File file = utenteBean.getFile(); 
      // /System.out.println(file.getName()); 
      try { 
       Util.saveFile(file, utenteBean.getFileFileName()); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
       return ERROR; 
      } 
     } else { 
      return ERROR; 
     } 

     return SUCCESS; 
    } 



    public void validate() { 


     if (session.get("utente") != null) { 
      this.utenteBean = (UtenteBeanAction) session.get("utente"); 
     } 

     if (this.utenteBean.getFileFileName() == null) { 
       this.addFieldError("utenteBean.file", "errore"); 
     } 

    } 


    public UtenteBeanAction getUtenteBean() { 
     return utenteBean; 
    } 

    public void setUtenteBean(UtenteBeanAction utenteBean) { 
     this.utenteBean = utenteBean; 
    } 




    public ServletContext getContext() { 
     return context; 
    } 

    public void setContext(ServletContext context) { 
     this.context = context; 
    } 

    @Override 
    public void setSession(Map<String, Object> session) { 
     // TODO Auto-generated method stub 

     this.session=session; 

    } 

} 

나는 도움이되기를 바랍니다. 지원에 감사드립니다.

관련 문제