1、页面上传Excel:
<form id="uploadForm" enctype="multipart/form-data" method="post">
<table id="tb_east">
<tr>
<td>文件名:</td>
<td><input id="fileName" class="srk"/></td>
</tr>
<tr>
<td>本地上传:</td>
<td><input type="file" id="file" name="upload"
title="请选择一个Excel文件"
onChange="if(this.value) getFileName(this.value);"/>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<a href="javascript:void(0);" id="btn"
class="easyui-linkbutton" onclick="uploadSubmit()">上传</a>
</td>
</tr>
</table>
</form>
<script type="text/javascript">
// 获取附件名
function getFileName(tValue){
var t1 = tValue.lastIndexOf("\\");
var t2 = tValue.lastIndexOf(".");
var suffix=tValue.substring(t2+1);
if (suffix!="xls") {
var file=document.getElementById("file");
if (file.outerHTML) { // for IE, Opera, Safari, Chrome
file.outerHTML = file.outerHTML;
} else { // FF(包括3.5)
file.value = "";
}
$("#fileName").val("");
alert("只支持后缀是.xls的Excel文件!");
return false;
}
if(t1 < t2 && t1 < tValue.length){
document.getElementById("fileName").value = tValue.substring(t1 + 1, t2);
}
}
// 上传Excel
function uploadSubmit(){
var isIE=0;
if (window.attachEvent) {
isIE=1;
}
var options = {
//跳转到相应的Action
url : "/ccit_datacenter/siphondata/upload.actionfunction=readTable&isIE="+isIE,
type : "POST",//提交方式
success : function(msg) {//调用Action后返回过来的数据
if (msg) {
$.messager.show({
title:"提示",
msg:"上传成功!",
showType:"show",
style:{left:"",right:0,
top:document.body.scrollTop+document.documentElement.scrollTop,
bottom:""}
});
}
msg=msg.replace(new RegExp(/(=)/g),":");
var data=eval("(" + msg+")");
$("#tables").combobox({
valueField: 'label',
textField: 'value',
data:data,
onSelect:function(record){
loadField(record);
}
});
}
};
$("#uploadForm").ajaxSubmit(options);//绑定页面中form表单的id
}
// 加载字段
function loadField(record){
var isIE=0;
if (window.attachEvent) {
isIE=1;
}
var options = {
//跳转到相应的Action
url : "/ccit_datacenter/siphondata/upload.actionfunction=readField&isIE="+isIE
+"&tableName="+record.value,
type : "POST",//提交方式
success : function(msg) {//调用Action后返回过来的数据
msg=msg.replace(new RegExp(/(=)/g),":");
var data=eval("(" + msg+")");
$("#centerGrid").datagrid("loadData",data);
}
};
$("#uploadForm").ajaxSubmit(options);//绑定页面中form表单的id
}
</script>
2、Action中处理完附件
/**
* 读取Excel文件
* @return
*/
public String upload(){
String result="";
try {
if(upload!=null){
Workbook book = Workbook.getWorkbook(upload);
Sheet[] tables=book.getSheets();
List<Map<String, Object>> tablesList=new ArrayList<Map<String, Object>>();
for (Sheet sheet2 : tables) {
Map<String, Object> tableMap=new HashMap<String, Object>();
tableMap.put("label", "'"+sheet2.getName()+"'");
tableMap.put("value", "'"+sheet2.getName()+"'");
tablesList.add(tableMap);
}
result=tablesList.toString();
book.close();
}
if (isIE==1) {// 是IE浏览器
is = new ByteArrayInputStream(result.getBytes("GBK"));
}else{
is = new ByteArrayInputStream(result.getBytes("UTF-8"));
}
} catch (Exception e) {
e.printStackTrace();
}
return SUCCESS;
}
3、struts.xml:
<action name="upload"
class="com.milestone.ccit.datacenter.action.ExcelUploadAction"
method="upload">
<result type="stream" name="success">
<param name="contentType">text/html</param>
<param name="inputName">is</param>
</result>
</action>
总结:用Ajax提交表单时,直接返回json={...},页面中根本接不到,故Struts中配置时,直接用流写回去的。返回到页面的都是字符串类型,可以用下面的形式转化为json对象:
msg=msg.replace(new RegExp(/(=)/g),":");// 把map组成的键值对的"="号转化为":"
var data=eval("(" + msg+")");
分享到:
相关推荐
- **用户体验优化**:如显示上传进度,提供取消上传的选项,以及在上传成功后自动将文件信息插入到表格中等。 - **安全性**:防止恶意文件上传,可能需要进行文件类型检查,防止上传可能含有病毒或脚本的文件。 综...
在使用layui前端框架进行文件上传时,可能会遇到一个常见的问题:虽然文件实际上已经成功上传到服务器,但layui却显示上传异常。这个问题通常与后端服务器返回的数据格式有关。本文将详细分析这个问题的原因,并提供...
如果页面显示了相关的服务列表,说明部署成功。若未显示,需要检查`ecology->WEB-INF->web.xml`配置文件,确认 `<servlet>` 和 `<servlet-mapping>` 部分包含XFireServlet的相关配置,如果缺失,需要手动添加。 接...
`success.jsp`页面就是用来展示上传成功后的提示信息。 6. **文件上传的前端页面** 在JSP页面(如`index.jsp`)中,需要包含Struts2的标签库,并使用`s:file`标签来提供一个文件上传控件。同时,`<s:form>`标签的`...
另外,为了提升邮件发送的成功率和安全性,实际生产环境中可能还需要考虑进行邮件头的额外设置,比如增加Content-ID来避免邮件客户端在解析附件时的编码问题,设置合适的字符集等。而为了防止恶意利用表单发送垃圾...
修改后可成功返回扫描结果。 使用方法1:作为控件使用。 方法2. 作为单元引用,推荐使用此种方式,很多人控件安装不添加library,报错;好讨厌delphi重装后还得重装控件。 特别说明,iOS未测试,IOS需要的文件...
修改后可成功返回扫描结果。 使用方法1:作为控件使用。 方法2. 作为单元引用,推荐使用此种方式,很多人控件安装不添加library,报错;好讨厌delphi重装后还得重装控件。 特别说明,iOS未测试,IOS需要的文件...
部署成功后,可以通过访问以下URL获取DocService接口的WSDL描述文件: ``` http://服务器:端口号/services/DocService?wsdl ``` 此WSDL文件详细描述了接口的结构、方法、数据类型等信息,是客户端调用接口的基础。...
- 调试过程中,可以查看FTP对象的返回值和日志信息来确定问题所在。 总结,PowerBuilder提供了方便的方式来实现FTP传输,无论是使用内置对象还是第三方库,都能满足大多数开发需求。理解FTP的工作原理和PB中的相关...
新版本已发布: 程序更新: V 3.99 2009.05.15 2009.05.15 部分代码重新归类做了新的排版,目的在于便于大家 使用和查找相对应的功能模块,另外在开机启动项的...由于代码过多,无法贴出来,只能上传附件。见谅。。。
6. **错误处理**:检查`send`方法的返回值,成功则发送成功,否则查看错误信息进行调试。 通过这个库,PHP开发者可以快速、高效地实现邮件功能,无论是用于用户注册验证、系统通知还是其他业务场景,PHPMailer都是...
如果发送成功,它会返回true,否则返回false,可以根据返回值处理错误。 7. **错误处理**:PHPMailer提供了错误处理机制,当邮件发送失败时,可以通过`ErrorInfo`属性获取错误信息,以便于调试和问题排查。 8. **...
3. **附件上传**:允许用户添加多个附件,包括各种文件类型。 4. **HTML邮件**:支持发送HTML格式的邮件,增强邮件的可读性和视觉效果。 5. **邮件验证**:通过验证发件人和收件人的邮箱地址,防止错误输入和垃圾...
- **解析**: MySQL成功安装后,系统默认会创建一个名为`root`的超级管理员用户,因此创建的用户个数为1个。 #### 构造方法调用 - **知识点**: 构造方法是一种特殊的方法,用于初始化新创建的对象。 - **解析**: ...
CancelClientEvent()是使用事件冒泡阻止了事件的继续执行,同时设置返回值,最终成功阻止事件的继续往后执行,当在客户端触发一要回发的按钮事件是,想在程序里结束让其继续执行时,以往则不是很好处理,如Enter键,...