You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Bryan Tartt (JIRA)" <ji...@apache.org> on 2009/11/25 14:58:13 UTC

[jira] Updated: (WW-3339) Form data lost (null) when using post method with Internet Explorer 7. Get method works fine and post works fine with Firefox.

     [ https://issues.apache.org/struts/browse/WW-3339?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Bryan Tartt updated WW-3339:
----------------------------

    Description: 
Every form that I have created has a problem retrieving data (returns null) in the Action when using Internet Explorer 6 and form method is post.  I have not tested against other versions of IE but FireFox works without any problems.  When I use get as the form method, the data is passed in IE and FireFox.  I don't know if this is an IE and ISeries issue or a Struts configuration (Interceptors) problem.  I have been searching for an answer on this problem for weeks without any luck. 


form

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="com.expensereport.*" %>
<%--@ page errorPage="/ExpRepErrorHandler.jsp" --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>		
		<title>Expense Reports</title>
		<sx:head />
		<script type="text/javascript" src="HeaderScript.js"></script>
		<link rel="stylesheet" href="<s:url value="styles/ExpRepStyles.css"/>" type="text/css">
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
		
	</head>


<body topmargin=0 leftmargin=0 bgproperties="fixed" onLoad="checkBrowser()">
<s:fielderror />
<s:form name="ReceiptForm" id="ReceiptForm" action="Receipt_upload" method="POST" validate="true" enctype="multipart/form-data" theme="simple" >
	<table align="center">
		<tr bgcolor="#003366"><td colspan="2" style="color:white">Receipt Upload</td></tr>
		<tr>			
		   <s:if test='%{#session.er.erh.reportID eq ""}'>
			<td><s:file name="receipt" id="receipt" size="30" disabled="true" /></td>
			<td><s:submit name="submit" id="submit" value="Upload Receipt" disabled="true" /></td>
		  </s:if>
		  <s:else>
			<td><s:file id="receipt" name="receipt" size="30"/></td>
			<td><s:submit name="submit" id="submit" value="Upload Receipt" /></td>
		  </s:else>
		</tr>
	</table>
</s:form>
</body>
</html>

struts.xml

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
    "http://struts.apache.org/dtds/struts-2.1.7.dtd">

<struts><!-- Configuration for the default package. -->
	<package name="expensereport" extends="struts-default">	
		
		<default-interceptor-ref name="defaultStack"/> 		
		
		<!--  Global results -->
		<global-results>
			<result name="bad">/ExpRepBadQueue.jsp</result>
			<result name="login">/index.html</result>
			<result name="error">/ExpRepBadQueue.jsp</result>
		</global-results>
		<global-exception-mappings>
			<exception-mapping exception="java.lang.Exception" result="bad"/>
		</global-exception-mappings>
		
	<!-- actions -->		
        <action name="Receipt_upload" class="com.expensereport.ReceiptUpload"> 
        	<interceptor-ref name="fileUploadStack"/>
	        <interceptor-ref name="basicStack"/>
        	<result>/ExpRepEntry.jsp</result>
        	<result name="input">/ExpRepEntry.jsp</result>
        </action>
        <action name="ModifyReport" class="com.expensereport.ExpenseReportModify">
        	<result>/ExpRepEntry.jsp</result>
        </action>
        <action name="ReportDelete" class="com.expensereport.ReportDelete">
        	<result name="confirm">/ExpRepDeleteConfirmation.jsp</result>
        	<result name="success" type="redirectAction">
        		<param name="actionName">/ReportQueue</param>
        		<param name="queueOwner">EMPLOYEE</param>
        		<param name="queueType">ALL</param>
        	</result>
        </action>  
        <action name="AttendeeInfo" class="com.expensereport.AttendeeInfo">
        	<result>/AttendeeInput.jsp</result>
        </action>    
        <action name="AjaxRemoteForm" class="com.expensereport.AjaxRemoteForm">
        	<result>/AjaxRemoteForm.jsp</result>
        </action>
	</package>	
</struts>

Action

package com.expensereport;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.servlet.ServletRequestContext;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;

import com.expensereport.EasyLog;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.Preparable;

public class ReceiptUpload extends ActionSupport implements SessionAware, Preparable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -2387150538575396408L;
	private File file;
	private String contentType;// The content type of the file
	private String fileName;// The uploaded file name and path
	private Map session;
	EasyLog log = new EasyLog();	
		
	
	public String execute(){
		
				
			getReceiptContentType();
			log.info("receiptContentType = " + contentType);
			getReceiptFileName();
			log.info("receiptFileName = " + fileName);
			getReceipt();		
			log.info("Receipt getName = " + file.getName());
					
			session = ActionContext.getContext().getSession();	 
			String reportID = "0000000";
			
			ExpenseReport er = (ExpenseReport) session.get("er");
			log.info("reportID = " + er.getErh().getReportID());
			
			if ((er.getErh().getReportID() == null) || (er.getErh().getReportID().trim().length() < 1)){
				er.getErh().setReportID(reportID);		
			}
			
			if (file != null){
				log.info("Creating a new file");
				boolean renamed = file.renameTo(new File("/home/tomdev/ObjectCache/Expense Reports/" + fileName));
			} else {
				log.error("Attachment was null");
			}
			
			log.info("return success");
			return SUCCESS;
	}

       public void prepare() throws Exception {
		
	}
}

  was:
Every form that I have created has a problem retrieving data (returns null) in the Action when using Internet Explorer 6 and form method is post.  I have not tested against other versions of IE but FireFox works without any problems.  When I use get as the form method, the data is passed in IE and FireFox.  I don't know if this is an IE and ISeries issue or a Struts configuration (Interceptors) problem.  I have been searching for an answer on this problem for weeks without any luck. 


form

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="com.expensereport.*" %>
<%--@ page errorPage="/ExpRepErrorHandler.jsp" --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>		
		<title>Expense Reports</title>
		<sx:head />
		<script type="text/javascript" src="HeaderScript.js"></script>
		<link rel="stylesheet" href="<s:url value="styles/ExpRepStyles.css"/>" type="text/css">
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
		
	</head>


<body topmargin=0 leftmargin=0 bgproperties="fixed" onLoad="checkBrowser()">
<s:fielderror />
<s:form name="ReceiptForm" id="ReceiptForm" action="Receipt_upload" method="POST" validate="true" enctype="multipart/form-data" theme="simple" >
	<table align="center">
		<tr bgcolor="#003366"><td colspan="2" style="color:white">Receipt Upload</td></tr>
		<tr>			
		   <s:if test='%{#session.er.erh.reportID eq ""}'>
			<td><s:file name="receipt" id="receipt" size="30" disabled="true" /></td>
			<td><s:submit name="submit" id="submit" value="Upload Receipt" disabled="true" /></td>
		  </s:if>
		  <s:else>
			<td><s:file id="receipt" name="receipt" size="30"/></td>
			<td><s:submit name="submit" id="submit" value="Upload Receipt" /></td>
		  </s:else>
		</tr>
	</table>
</s:form>
</body>
</html>

struts.xml

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
    "http://struts.apache.org/dtds/struts-2.1.7.dtd">

<struts><!-- Configuration for the default package. -->
	<package name="expensereport" extends="struts-default">	
		
		<default-interceptor-ref name="defaultStack"/> 		
		
		<!--  Global results -->
		<global-results>
			<result name="bad">/ExpRepBadQueue.jsp</result>
			<result name="login">/index.html</result>
			<result name="error">/ExpRepBadQueue.jsp</result>
		</global-results>
		<global-exception-mappings>
			<exception-mapping exception="java.lang.Exception" result="bad"/>
		</global-exception-mappings>
		
	<!-- actions -->		
        <action name="Receipt_upload" class="com.expensereport.ReceiptUpload"> 
        	<interceptor-ref name="fileUploadStack"/>
	        <interceptor-ref name="basicStack"/>
        	<result>/ExpRepEntry.jsp</result>
        	<result name="input">/ExpRepEntry.jsp</result>
        </action>
        <action name="ModifyReport" class="com.expensereport.ExpenseReportModify">
        	<result>/ExpRepEntry.jsp</result>
        </action>
        <action name="ReportDelete" class="com.expensereport.ReportDelete">
        	<result name="confirm">/ExpRepDeleteConfirmation.jsp</result>
        	<result name="success" type="redirectAction">
        		<param name="actionName">/ReportQueue</param>
        		<param name="queueOwner">EMPLOYEE</param>
        		<param name="queueType">ALL</param>
        	</result>
        </action>  
        <action name="AttendeeInfo" class="com.expensereport.AttendeeInfo">
        	<result>/AttendeeInput.jsp</result>
        </action>    
        <action name="AjaxRemoteForm" class="com.expensereport.AjaxRemoteForm">
        	<result>/AjaxRemoteForm.jsp</result>
        </action>
	</package>	
</struts>

Action

package com.expensereport;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.servlet.ServletRequestContext;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;

import com.expensereport.EasyLog;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.Preparable;

public class ReceiptUpload extends ActionSupport implements SessionAware, Preparable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -2387150538575396408L;
	private File file;
	private String contentType;// The content type of the file
	private String fileName;// The uploaded file name and path
	private Map session;
	EasyLog log = new EasyLog();	
		
	
	public String execute(){
		
		if(!validationSuccessful()){
			return "input";
		} else {			
			getReceiptContentType();
			log.info("receiptContentType = " + contentType);
			getReceiptFileName();
			log.info("receiptFileName = " + fileName);
			getReceipt();		
			log.info("Receipt getName = " + file.getName());
					
			session = ActionContext.getContext().getSession();	 
			String reportID = "0000000";
			
			ExpenseReport er = (ExpenseReport) session.get("er");
			log.info("reportID = " + er.getErh().getReportID());
			
			if ((er.getErh().getReportID() == null) || (er.getErh().getReportID().trim().length() < 1)){
				er.getErh().setReportID(reportID);		
			}
			
			if (file != null){
				log.info("Creating a new file");
				boolean renamed = file.renameTo(new File("/home/tomdev/ObjectCache/Expense Reports/" + fileName));
			} else {
				log.error("Attachment was null");
			}
			
			log.info("return success");
			return SUCCESS;
		}
	}

       public void prepare() throws Exception {
		
	}
}

    Environment: Tomcat 5.5.28 on IBM ISeries, IE 7, Struts2, Java 1.5  (was: Tomcat 5.5.28 on IBM ISeries, IE 6, Struts2, Java 1.5)
        Summary: Form data lost (null) when using post method with Internet Explorer 7.  Get method works fine and post works fine with Firefox.   (was: Form data lost (null) when using post method with Internet Explorer 6.  Get method works fine and post works fine with Firefox. )

Corrected browser version.

> Form data lost (null) when using post method with Internet Explorer 7.  Get method works fine and post works fine with Firefox. 
> --------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: WW-3339
>                 URL: https://issues.apache.org/struts/browse/WW-3339
>             Project: Struts 2
>          Issue Type: Bug
>    Affects Versions: 2.1.8
>         Environment: Tomcat 5.5.28 on IBM ISeries, IE 7, Struts2, Java 1.5
>            Reporter: Bryan Tartt
>
> Every form that I have created has a problem retrieving data (returns null) in the Action when using Internet Explorer 6 and form method is post.  I have not tested against other versions of IE but FireFox works without any problems.  When I use get as the form method, the data is passed in IE and FireFox.  I don't know if this is an IE and ISeries issue or a Struts configuration (Interceptors) problem.  I have been searching for an answer on this problem for weeks without any luck. 
> form
> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
> <%@ page import="com.expensereport.*" %>
> <%--@ page errorPage="/ExpRepErrorHandler.jsp" --%>
> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
> <%@ taglib prefix="s" uri="/struts-tags" %>
> <%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
> <html>
> 	<head>		
> 		<title>Expense Reports</title>
> 		<sx:head />
> 		<script type="text/javascript" src="HeaderScript.js"></script>
> 		<link rel="stylesheet" href="<s:url value="styles/ExpRepStyles.css"/>" type="text/css">
> 		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
> 		
> 	</head>
> <body topmargin=0 leftmargin=0 bgproperties="fixed" onLoad="checkBrowser()">
> <s:fielderror />
> <s:form name="ReceiptForm" id="ReceiptForm" action="Receipt_upload" method="POST" validate="true" enctype="multipart/form-data" theme="simple" >
> 	<table align="center">
> 		<tr bgcolor="#003366"><td colspan="2" style="color:white">Receipt Upload</td></tr>
> 		<tr>			
> 		   <s:if test='%{#session.er.erh.reportID eq ""}'>
> 			<td><s:file name="receipt" id="receipt" size="30" disabled="true" /></td>
> 			<td><s:submit name="submit" id="submit" value="Upload Receipt" disabled="true" /></td>
> 		  </s:if>
> 		  <s:else>
> 			<td><s:file id="receipt" name="receipt" size="30"/></td>
> 			<td><s:submit name="submit" id="submit" value="Upload Receipt" /></td>
> 		  </s:else>
> 		</tr>
> 	</table>
> </s:form>
> </body>
> </html>
> struts.xml
> <!DOCTYPE struts PUBLIC
>     "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
>     "http://struts.apache.org/dtds/struts-2.1.7.dtd">
> <struts><!-- Configuration for the default package. -->
> 	<package name="expensereport" extends="struts-default">	
> 		
> 		<default-interceptor-ref name="defaultStack"/> 		
> 		
> 		<!--  Global results -->
> 		<global-results>
> 			<result name="bad">/ExpRepBadQueue.jsp</result>
> 			<result name="login">/index.html</result>
> 			<result name="error">/ExpRepBadQueue.jsp</result>
> 		</global-results>
> 		<global-exception-mappings>
> 			<exception-mapping exception="java.lang.Exception" result="bad"/>
> 		</global-exception-mappings>
> 		
> 	<!-- actions -->		
>         <action name="Receipt_upload" class="com.expensereport.ReceiptUpload"> 
>         	<interceptor-ref name="fileUploadStack"/>
> 	        <interceptor-ref name="basicStack"/>
>         	<result>/ExpRepEntry.jsp</result>
>         	<result name="input">/ExpRepEntry.jsp</result>
>         </action>
>         <action name="ModifyReport" class="com.expensereport.ExpenseReportModify">
>         	<result>/ExpRepEntry.jsp</result>
>         </action>
>         <action name="ReportDelete" class="com.expensereport.ReportDelete">
>         	<result name="confirm">/ExpRepDeleteConfirmation.jsp</result>
>         	<result name="success" type="redirectAction">
>         		<param name="actionName">/ReportQueue</param>
>         		<param name="queueOwner">EMPLOYEE</param>
>         		<param name="queueType">ALL</param>
>         	</result>
>         </action>  
>         <action name="AttendeeInfo" class="com.expensereport.AttendeeInfo">
>         	<result>/AttendeeInput.jsp</result>
>         </action>    
>         <action name="AjaxRemoteForm" class="com.expensereport.AjaxRemoteForm">
>         	<result>/AjaxRemoteForm.jsp</result>
>         </action>
> 	</package>	
> </struts>
> Action
> package com.expensereport;
> import java.io.BufferedReader;
> import java.io.File;
> import java.io.FileInputStream;
> import java.io.FileNotFoundException;
> import java.io.FileOutputStream;
> import java.io.FileWriter;
> import java.io.IOException;
> import java.util.HashMap;
> import java.util.Iterator;
> import java.util.List;
> import java.util.Map;
> import javax.servlet.http.HttpServletRequest;
> import javax.servlet.http.HttpServletResponse;
> import org.apache.commons.fileupload.FileItem;
> import org.apache.commons.fileupload.FileItemFactory;
> import org.apache.commons.fileupload.FileUploadException;
> import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
> import org.apache.commons.fileupload.disk.DiskFileItemFactory;
> import org.apache.commons.fileupload.servlet.ServletFileUpload;
> import org.apache.commons.fileupload.servlet.ServletRequestContext;
> import org.apache.struts2.ServletActionContext;
> import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper;
> import org.apache.struts2.interceptor.ServletRequestAware;
> import org.apache.struts2.interceptor.ServletResponseAware;
> import org.apache.struts2.interceptor.SessionAware;
> import com.expensereport.EasyLog;
> import com.opensymphony.xwork2.ActionContext;
> import com.opensymphony.xwork2.ActionSupport;
> import com.opensymphony.xwork2.Preparable;
> public class ReceiptUpload extends ActionSupport implements SessionAware, Preparable {
> 	
> 	/**
> 	 * 
> 	 */
> 	private static final long serialVersionUID = -2387150538575396408L;
> 	private File file;
> 	private String contentType;// The content type of the file
> 	private String fileName;// The uploaded file name and path
> 	private Map session;
> 	EasyLog log = new EasyLog();	
> 		
> 	
> 	public String execute(){
> 		
> 				
> 			getReceiptContentType();
> 			log.info("receiptContentType = " + contentType);
> 			getReceiptFileName();
> 			log.info("receiptFileName = " + fileName);
> 			getReceipt();		
> 			log.info("Receipt getName = " + file.getName());
> 					
> 			session = ActionContext.getContext().getSession();	 
> 			String reportID = "0000000";
> 			
> 			ExpenseReport er = (ExpenseReport) session.get("er");
> 			log.info("reportID = " + er.getErh().getReportID());
> 			
> 			if ((er.getErh().getReportID() == null) || (er.getErh().getReportID().trim().length() < 1)){
> 				er.getErh().setReportID(reportID);		
> 			}
> 			
> 			if (file != null){
> 				log.info("Creating a new file");
> 				boolean renamed = file.renameTo(new File("/home/tomdev/ObjectCache/Expense Reports/" + fileName));
> 			} else {
> 				log.error("Attachment was null");
> 			}
> 			
> 			log.info("return success");
> 			return SUCCESS;
> 	}
>        public void prepare() throws Exception {
> 		
> 	}
> }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.