关于导入excel文件中打开文件浏览对话框的问题(jsp、struts1)

这块本来已经做好了,在本机上测试也无误,只是每次打开对话框的时候有点慢,可能是因为在action里用JFileChooser打开的

没想到部署到服务器以后,对话框一点就卡住了,有时候等半天对话框都不出来然后服务器就崩溃了,当时我也崩溃了。

原来的代码:

jsp部分

<a href="studentAction.do?action=toImportStudentInfo">
<img src="image/botton/import.jpg" width="102" height="29" border="0"/>
</a>

Action部分

JFileChooser jfc = new JFileChooser (); //打开文件浏览对话框
jfc.setAcceptAllFileFilterUsed(true); //去掉显示所有文件这个过滤器。
jfc.setFileFilter(new ExcelFileFilter("xls")); //添加excel文件的过滤器
int result=jfc.showOpenDialog(null);        
if (result == JFileChooser.APPROVE_OPTION) {
      try{
           File fSource=jfc.getSelectedFile();                
           FileInputStream in=new FileInputStream(fSource);
           HSSFWorkbook workbook= new HSSFWorkbook(in);
                ……
      }catch(Exception e){
                e.printStackTrace();
                return null;
         }
}

具体关于POI HSSF的代码另外写(因为在实现的时候也遇到过一个纠结了很久的问题),对话框出来是java风格(其丑无比),于是又加在JFileChooser前加一段代码将其改成伪windows风格

try {  //打开文件窗口设置为windows风格
            UIManager.setLookAndFeel(
            UIManager.getSystemLookAndFeelClassName()); 
        } catch (Exception e) {  
            e.printStackTrace();  
   } 

以上代码在本机上运行都是没问题的,问题是部署到服务器上,再访问就抽风了!!

修改后的代码:

jsp部分:

<form id="form2" >
    <input id="filename" type="file" name="filename" class="textarea">
    <a id="a1" href="javascript:void(0)" onclick="submitFile()" >
        <img src="image/botton/import.jpg" width="102" height="29" border="0"/>
    </a>
</form>    

JS部分:

<script type="text/javascript"> 
    function submitFile(){
        var a = document.getElementById('filename').value;
        var url="studentAction.do?action=toImportStudentInfo&file="+encodeURI(encodeURI(a));
        window.location =url;        
    }    
</script>

我尝试在后台直接用request.getParament("filename")来获得这个路径,但是一直传null,原因不明,于是只能通过拐弯抹角的办法从前台传参。

其中encodeURI()是为了转码,不然路径里带中文字,传到后台就是乱码。

Action部分:

String s1=request.getParameter("file")+"";
s1=java.net.URLDecoder.decode(s1, "UTF-8");
if (s1!=null) { 
    try{
        File fSource = new File(s1);                     
        String fileName=fSource.getAbsolutePath();
        FileInputStream in=new FileInputStream(fSource);
        HSSFWorkbook workbook= new HSSFWorkbook(in);
               ……
         }catch(Exception e){
        e.printStackTrace();
        return null;
    }
}      

(1)为什么用JS而不用正常的表单提交来从后台获得?

  因为要重写提交方法以后,后台怎么都获得不了filename永远是null,解决无能之后改成这种方式

(2)因为安全问题,许多浏览器会把获得的路径替换成fakepath,比如chrome,FF,IE如果设置安全级别高也会发生这种情况,也就是代码中前台的a和后台的s1(文件本地路径),肿么办?

  尚未解决,解决了再接着写TAT

posted @ 2012-08-07 21:50  苜冉冉  阅读(560)  评论(0编辑  收藏  举报