前台xxx.jsp<script>
function subFile(selectFile)
{
document.form1.action = '/fckeditor/LoadFile?selectFile='+selectFile;
document.form1.submit();
}
function setFileName(fileName,fileNum)
{
     document.getElementById('filename'+fileNum).value= fileName;

</script>
<form action="" method="post"  target="targetFrame" name="form1" enctype="multipart/form-data">
<input type="hidden" id="filename1" name="filename1"/> 
<input type="hidden" id="filename2" name="filename2"/> 
<input type="file" onchange="javascript:subFile('file1')" name="file1" id="file1"/> 
<input type="file" onchange="javascript:subFile('file2')" name="file2" id="file2"/> 
<iframe name="targetFrame" width="0" height="0"></iframe>
</form>
上面jsp提交的类
public class LoadFile extends HttpServlet {
public void init() throws ServletException, IllegalArgumentException {
} private Map getPagePro(Iterator iter) throws Exception {
Map<String, String> _map = new HashMap<String, String>();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
String name = item.getFieldName();
if (item.isFormField() && name.equals("filename1"))
_map.put("filename1", item.getString());
if (item.isFormField() && name.equals("filename2"))
_map.put("filename2", item.getString());
}
return _map;
} public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
doPost(request, response);
} catch (Exception e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
} public void doPost(HttpServletRequest request, HttpServletResponse response) {
response.setContentType("text/html; charset=utf-8");
response.setCharacterEncoding("UTF-8");
PrintWriter out = null;
try {
out = response.getWriter();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = null;
try {
items = upload.parseRequest(request);
} catch (FileUploadException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
Iterator iter = items.iterator();
Map _reqMap = null;
try {
_reqMap = getPagePro(iter);
} catch (Exception e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
System.out.println("1=" + _reqMap.get("filename1"));
System.out.println("2=" + _reqMap.get("filename2"));
String _fileN = request.getParameter("selectFile");
String jsParam1 = "";
String jsParam2 = ""; if (_fileN.equals("file1"))
jsParam1 = "1";
else
jsParam1 = "2";
Object _o[] = new Object[2];
_o[0] = jsParam1;
_o[1] = jsParam1;
String ojs = pJs(_o);
out.print(ojs);
out.flush();
out.close();
} public String pJs(Object[] parameters) {
StringBuffer sb = new StringBuffer(400);
sb.append("<script type=\"text/javascript\">\n");
sb
.append("(function(){var d=document.domain;while (true){try{var A=window.parent.document.domain;break;}catch(e) {};d=d.replace(/.*?(?:\\.|$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){alert('message');break;}}})();\n");
sb.append("parent.setFileName(");
for (Object parameter : parameters) {
if (parameter instanceof Integer) {
sb.append(parameter);
} else {
sb.append("'");
if (parameter != null)
sb.append(parameter);
sb.append("'");
}
sb.append(",");
}
sb.deleteCharAt(sb.length() - 1);
sb.append(");\n");
sb.append("</script>");
return sb.toString();
}
}
操作如下:
这是在IE6下!一切正常步骤1、选择file1框,调用后台,后台的
System.out.println("1=" + _reqMap.get("filename1"));
System.out.println("2=" + _reqMap.get("filename2"));
输出为1=空、2=空,后台调用setFileName将1设给filename1!步骤2、选择file2框,调用后台,后台的
System.out.println("1=" + _reqMap.get("filename1"));
System.out.println("2=" + _reqMap.get("filename2"));
输出为1=1、2=空,后台调用setFileName将2设给filename2!步骤3、选择file1框,调用后台,后台的
System.out.println("1=" + _reqMap.get("filename1"));
System.out.println("2=" + _reqMap.get("filename2"));
输出为1=1、2=2,后台调用setFileName将1设给filename1!步骤4、点右键,选择刷新。重复步骤1,2,3效果一样
FF3下的,感觉数据没有清空!
步骤1、同前
步骤2、同前
步骤3、同前
步骤4、点右键,选择重新载入。重复步骤1,后台的
System.out.println("1=" + _reqMap.get("filename1"));
System.out.println("2=" + _reqMap.get("filename2"));
输出为1=1、2=2。感觉FF3根本没有清除表单的数据!
不知道怎么解决啊!希望FF3跟IE效果一样啊!选择重新载入就彻底刷新页面!希望能得到大家的帮助啊

解决方案 »

  1.   

    FF 跟 IE好多地方都不兼容……
      

  2.   

    在浏览器里 file不允许你做那么多操作
      

  3.   

    <input type="file" onchange="javascript:subFile('file1')" name="file1" id="file1"/>
    <input type="file" onchange="javascript:subFile('file2')" name="file2" id="file2"/>
    这两句改成下面的试试:
    <input type="file" onchange="subFile('file1');" name="file1" id="file1" />
    <input type="file" onchange="subFile('file2');" name="file2" id="file2" />
      

  4.   

    页面赋初始值,
    window.onload =function(){
        document.getElementById('file1').value="";
        document.getElementById('file2').value="";
    }
      

  5.   

    没有任何错误啊
    只是跟我预想的结果不一样啊!我希望ff能跟ie下一样啊!
    操作如下: 
    步骤1、选择file1框,调用后台,后输出为:
    1=空、
    2=空步骤2、选择file2框,调用后台,后台输出为:
    1=1、
    2=空步骤3、选择file1框,调用后台,后台输出为:
    1=1、
    2=2,步骤4、点右键,选择刷新。重复步骤1,2,3效果同上 (IE6.0下)
    步骤4、点右键,选择重新载入。重复步骤1 (FF3.0下)
    重复步骤1,后台的输出为
    1=1、
    2=2
    感觉FF3根本没有清除表单的数据!不知道怎么解决啊!希望FF3跟IE效果一样啊!选择重新载入就彻底刷新页面! 
      

  6.   

    我感觉是缓存的问题.你在JSP加载的时候每次都清空缓存试试
      

  7.   

    我只需要在刷新的时候清除!就象ie的就可以了!现在就是ff不支持啊!!!!
      

  8.   

    不兼容的地方判断一下吧,类似ajax的生成xmlRequest一样
      

  9.   

    在firebug下看看那几个节点得值 ,这么写应该没影响吧
      

  10.   

    页面赋初始值, 
    window.onload =function(){ 
        document.getElementById('file1').value=""; 
        document.getElementById('file2').value=""; 
    }