最近做了个用户维护功能,涉及到照片的操作。

照片是存到数据库oracle中的Blob字段中。

难点有两个:

1,图片的上传;2,Blob字段的读取。

先说图片的上传吧,

我使用common-fileupload来实现的

写个servlet,实现上传到服务器。

UpPhotoServlet.java

[java] view plaincopy
  1. package org.hd.tempuser.serv;
  2. import java.io.*;
  3. import java.util.ArrayList;
  4. import java.util.Iterator;
  5. import java.util.List;
  6. import javax.servlet.RequestDispatcher;
  7. import javax.servlet.ServletException;
  8. import javax.servlet.http.HttpServlet;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. import org.apache.commons.fileupload.FileItem;
  12. import org.apache.commons.fileupload.FileItemFactory;
  13. import org.apache.commons.fileupload.disk.DiskFileItemFactory;
  14. import org.apache.commons.fileupload.servlet.ServletFileUpload;
  15. import org.hd.util.BlobUtil;
  16. import org.hd.util.RamdomUtil;
  17. public class UpPhotoServlet extends HttpServlet {
  18. public UpPhotoServlet(){
  19. super();
  20. }
  21. public void destroy(){
  22. super.destroy();
  23. }
  24. /**
  25. * Handles GET requests 处理下载请求
  26. */
  27. public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
  28. doPost(request, response);
  29. }
  30. /**
  31. * Handles POST requests 处理上传请求
  32. */
  33. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
  34. response.setContentType("text/html");
  35. response.setHeader("Cache-Control""no-cache");
  36. //IntoLineService intoLineService = (IntoLineService)ContainerManager.getComponent(IntoLineService.BEAN_ID);
  37. response.setCharacterEncoding("UTF-8");
  38. PrintWriter out = response.getWriter();
  39. String jobNumber="";
  40. if(request.getParameter("jobNumber")!=null){
  41. jobNumber=request.getParameter("jobNumber").trim();
  42. }
  43. ///
  44. final long MAX_SIZE = 6 * 1024 * 1024;// 设置上传文件最大为 3M
  45. final int TEMP_MAX_SIZE = 6 * 1024 * 1024;// 设置上传文件最大为 3M
  46. // 允许上传的文件格式的列表
  47. final String[] allowedExt = new String[] { "jpg""jpeg""gif""txt","doc""docx""mp3""wma""m4a" };
  48. // 文件上傳部分
  49. boolean isMultipart = ServletFileUpload.isMultipartContent(request);
  50. if (isMultipart == true) {
  51. try {
  52. DiskFileItemFactory  factory = new DiskFileItemFactory();
  53. factory.setSizeThreshold(TEMP_MAX_SIZE);
  54. factory.setRepository(new File(request.getSession().getServletContext().getRealPath("/") + "StrutsImagesUploadTemp"));
  55. ServletFileUpload upload = new ServletFileUpload(factory);
  56. upload.setSizeMax(MAX_SIZE);
  57. // 得到所有的表单域,它们目前都被当作FileItem
  58. List<FileItem> fileItems = upload.parseRequest(request);
  59. for(int i=0;i<fileItems.size();i++){
  60. FileItem ff=(FileItem)fileItems.get(i);
  61. if(ff.isFormField()){
  62. // 如果item是正常的表单域
  63. String ffname = ff.getFieldName();
  64. String ffvalue = ff.getString();
  65. if(ffname.trim().equals("gonghao")){
  66. jobNumber=ffvalue;
  67. }
  68. //continue;
  69. }
  70. }
  71. Iterator<FileItem> iter = fileItems.iterator();
  72. if(fileItems==null||fileItems.size()==0){
  73. return;
  74. }
  75. // 依次处理每个表单域
  76. while (iter.hasNext()) {
  77. FileItem item = null;
  78. String path = null;
  79. long size = 0;
  80. item = (FileItem) iter.next();
  81. if(item == null ||item.isFormField()){
  82. // 如果item是正常的表单域
  83. String name = item.getFieldName();
  84. String value = item.getString();
  85. System.out.print("表单域名为:"+name+"表单域值为:"+value);
  86. if(name.trim().equals("gonghao")){
  87. jobNumber=value;
  88. }
  89. //continue;
  90. }else{
  91. // 得到文件的完整路径
  92. // 如果item是文件上传表单域
  93. // 获得文件名及路径
  94. path = item.getName();
  95. size = item.getSize();
  96. if ("".equals(path) || size == 0) {
  97. return;
  98. }
  99. String fileName = item.getName();
  100. System.out.println("item.getName()----"+fileName);
  101. if (fileName != null) {
  102. File fullFile = new File(item.getName());
  103. // 如果文件存在则上传
  104. // if(fullFile.exists()){
  105. //                                File fileOnServer = new File(BlobUtil.makeDirByParamForOds(jobNumber, BlobUtil.DirTypeTempupload),
  106. //                                        fullFile.getName());
  107. String temprepath=BlobUtil.makeDirByParamForOdsRealPath(jobNumber,BlobUtil.DirTypeTempupload)+BlobUtil.getFileSuffix(fileName);
  108. String temprepathxie=BlobUtil.makeDirByParamForOds(jobNumber,BlobUtil.DirTypeTempupload)+BlobUtil.getFileSuffix(fileName);
  109. String serpp=BlobUtil.BASE_PATH+temprepath;
  110. File fileOnServer = new File(serpp);
  111. //删除已经存在的文件
  112. if(fileOnServer.exists()&&fileOnServer.isFile()){
  113. fileOnServer.delete();
  114. }
  115. item.write(fileOnServer);
  116. String forWrite="\\\\tempphoto"+temprepath;
  117. String forWebShow="/tempphoto"+temprepathxie;
  118. request.getSession().setAttribute("tempupload"+jobNumber, "/tempphoto"+temprepathxie);
  119. //                                out.write(temprepathxie);
  120. //加参数(随机数)防止浏览器从缓存中读取图片
  121. String ramStr=RamdomUtil.getRamdomDateStr();
  122. String contextpp=request.getContextPath()+"/tempphoto"+temprepathxie+"?randomStr="+ramStr;
  123. String htmlstr=" <img src=\""+contextpp+"\" width=\"75px\" height=\"95px\" id=\"person_img\"/>";
  124. htmlstr+="<script>";
  125. htmlstr+="parent.window.rebackUrl('"+forWebShow+"','"+forWrite+"');";
  126. htmlstr+="";
  127. htmlstr+="";
  128. htmlstr+="";
  129. htmlstr+="</script>";
  130. out.write(htmlstr);
  131. /*
  132. <img src="<%=path%>/resource/images/preson_img.jpg" width="75px" height="95px" id="person_img"/>
  133. */
  134. System.out.println("文件"+fileOnServer.getName()+"上传成功");
  135. // }
  136. }
  137. }
  138. }
  139. catch (Exception e) {
  140. e.printStackTrace();
  141. }
  142. else {
  143. System.out.println("the enctype must be multipart/form-data");
  144. }
  145. // 跳回原頁面
  146. // RequestDispatcher dispatcher = request
  147. //         .getRequestDispatcher("/web/page/uploadtoserver.jsp");
  148. // dispatcher.forward(request, response);
  149. // return;
  150. //
  151. //out.write("YES");
  152. out.close();
  153. }
  154. }



web.xml配置servlet

[html] view plaincopy
  1. <servlet>
  2. <servlet-name>upphoto</servlet-name>
  3. <servlet-class>
  4. org.hd.tempuser.serv.UpPhotoServlet
  5. </servlet-class>
  6. </servlet>
  7. <servlet-mapping>
  8. <servlet-name>upphoto</servlet-name>
  9. <url-pattern>/upphoto/upphotoServlet</url-pattern>
  10. </servlet-mapping>


要说的有以下几点:

common-fileupload已经帮你读文件了,你做的只是确定要写的文件。

这个你只要获取工程的实际路径并创建相应的目录,对应好文件名即可。

说白了就是你要提供要写的文件的path。

还有一点,文件上传后,使用PrintWriter输出html代码

(response.setContentType("text/html");)

这个html代码就是你上传完后在页面看到的效果,

我加了一段js,可以调用父页面的方法。

注意:照片只是一个字段,为了不让返回的页面整个变化,我使用了iframe。

就是照片的页面在一个iframe中。

所以这就涉及到iframe父子页面传值的问题(怎么传,我的代码已经有例子了。)

另外,上传图片成功后我会把图片的一个url返回给页面以便在页面显示你上传的图片,

这是url后面需要加一个随即参数,不加的话,如果第二次再显示修改后的照片,你会发现

图片的url是正确的(鼠标右键查看),但显示的却是原先的图片!

原因就是浏览器缓存!只要url没有变,浏览器就从缓存中读取图片,所以你加一个随即的参数

让url每次都不一样就可以了,浏览器每次都不从缓存中读。

随机参数随便写,不一样就可以,例如RamdomUtil.java

[html] view plaincopy
  1. package org.hd.util;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Date;
  4. import java.util.Random;
  5. public class RamdomUtil {
  6. public static String getRamdomIntStr(){
  7. String res="";
  8. Random random1 = new Random();
  9. res=String.valueOf(random1.nextInt()).trim();
  10. return res;
  11. }
  12. public static String getRamdomDateStr(){
  13. String res="";
  14. Date dd=new Date();
  15. SimpleDateFormat  sdf=new SimpleDateFormat("yyyyMMddHHmmss");
  16. res=sdf.format(dd);
  17. return res;
  18. }
  19. public static void main(String[]dsf){
  20. RamdomUtil.getRamdomIntStr();
  21. System.out.println(RamdomUtil.getRamdomDateStr());
  22. }
  23. }


新增用户页面add_user.jsp

[html] view plaincopy
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
  2. <%@ taglib uri="/struts-tags" prefix="s"%>
  3. <%@ page import="org.hd.tempuser.model.TempUser" %>
  4. <%
  5. String path = request.getContextPath();
  6. %>
  7. <%
  8. String addSuccess = "";
  9. if(request.getAttribute("addSuccess")!=null){
  10. addSuccess=(String)request.getAttribute("addSuccess");
  11. }
  12. %>
  13. <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
  14. <head>
  15. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  16. <link href="<%=path%>/resource/css/style.css" rel="stylesheet" type="text/css" />
  17. <script src="<%=path%>/script/jquery-1.7.1.js" type="text/javascript"></script>
  18. <script src="<%=path%>/script/queryHeader.js" type="text/javascript"></script>
  19. <script src="<%=path%>/script/main.js" type="text/javascript"></script>
  20. <script src="<%=path%>/script/plugin/plugin_core.js" type="text/javascript"></script>
  21. <script src="<%=path%>/script/plugin/calendar/calendar_util.js" type="text/javascript"></script>
  22. <script src="<%=path%>/script/plugin/calendar/calendar.js" type="text/javascript"></script>
  23. <script src="<%=path%>/script/hd/validate.js" type="text/javascript"></script>
  24. </head>
  25. <body style="background:#828282">
  26. <input type="hidden" id="path" value="<%=path%>" />
  27. <input type="hidden" id="addSuccess" value="<%=addSuccess%>" />
  28. <div style="overflow-y:scroll">
  29. <form id="formadd" method="post" action="<%=path%>/tempUser/addTempUser.action">
  30. <input type="hidden" id="localPhotoUrl" name="localPhotoUrl" value="" />
  31. <input type="hidden" id="sex"  name="addTempUser.sex" value="" />
  32. <input type="hidden" id="job_level"  name="addTempUser.job_level" value="" />
  33. <input type="hidden" id="remark" name="addTempUser.remark"  value="" />
  34. <table width="100%" height="30" border="0" cellspacing="0" cellpadding="0" id="box_title">
  35. <tr>
  36. <td class="left" width="6"></td>
  37. <td class="title">新增坐席</td>
  38. </tr>
  39. </table>
  40. <table width="100%" height="160px" border="0" cellspacing="0" cellpadding="0" class="nbox11" style="padding-left:6px">
  41. <tr>
  42. <td>
  43. <div class="contentBody">
  44. <table class="nbox14 blackn12" border="0" cellspacing="0" cellpadding="0" width="800px">
  45. <tr >
  46. <td class="td1">账号:</td><td class="td2"><input type="text"  name="addTempUser.uname" class="inputbox1" id="uname" style="width:175px;" value=""/></td>
  47. <td class="td1">性别:</td><td class="td2"><select style="width: 178px; height: 21px" id="fakesex" class="blackn12" name="addTempUser.fakesex"><option value=''>...请选择</option><option value='男'></option><option value='女'></option></select></td>
  48. </tr>
  49. <tr>
  50. <td class="td1">密码:</td><td class="td2"><input type="text"  name="addTempUser.upass" class="inputbox1" id="upass" style="width:175px;" value=""/></td>
  51. <td class="td1">姓名:</td><td class="td2"><input type="text"  name="addTempUser.realname" class="inputbox1" id="realname" style="width:175px;" value=""/></td>
  52. </tr>
  53. <tr>
  54. <td class="td1">邮件地址:</td><td class="td2"><input type="text"  name="addTempUser.email" class="inputbox1" id="email" style="width:175px;" value=""/></td>
  55. <td class="td1">手机号码:</td><td class="td2"><input type="text"  name="addTempUser.cellphone" class="inputbox1" id="cellphone" style="width:175px;" value=""/></td>
  56. </tr>
  57. <tr >
  58. <td class="td1">分机:</td><td class="td2"><input type="text"  name="addTempUser.ext" class="inputbox1" id="ext" style="width:175px;" value=""/></td>
  59. <td class="td1">电话:</td><td class="td2"><input type="text"  name="addTempUser.phone" class="inputbox1" id="phone" style="width:175px;" value=""/></td>
  60. </tr>
  61. <tr>
  62. <td class="td1">职级:</td><td class="td2"><select style="width: 178px; height: 21px" id="fakejob_level" class="blackn12" name="addTempUser.fakejob_level"><option value=''>...请选择</option><option value='坐席'>坐席</option><option value='坐席班长'>坐席班长</option></select></td>
  63. <td class="td1"></td>
  64. <td class="td2">
  65. </td>
  66. </tr>
  67. </table>
  68. </div>
  69. </td>
  70. </tr>
  71. </table>
  72. <div style="background:#f3f3f3">
  73. <table width="100%" height="50px" border="0" cellpadding="0" cellspacing="0" id="box_foot">
  74. <tr>
  75. <td style="height:50px;width:160px;text-align:right;padding-right:12px;font-size:12px; color:#333; ">备注:</td>
  76. <td style="height:50px;width:50px;text-align:left;">
  77. <textarea rows="3" cols="26"  name="addTempUser.fakeremark" id="fakeremark" >
  78. </textarea>
  79. </td>
  80. <td style="height:50px;width:80px;text-align:right;padding-right:12px;font-size:12px; color:#333; ">照片:</td>
  81. <td style="height:50px;text-align:left;">
  82. <iframe src="<%=path%>/jsp/hd/home/usermanage/photo.jsp" name="photoframe" width="300px" height="100px" scrolling="auto">
  83. </iframe>
  84. </td>
  85. </tr>
  86. </table>
  87. </div>
  88. <div style="background:#ffffff;padding-top:20px;">
  89. <table width="100%" height="30px" border="0" cellspacing="0" cellpadding="0" class="nbox11" style="padding-left:6px">
  90. <tr>
  91. <td style="width:20%;text-align:right;padding-right:12px;">
  92. </td>
  93. <td style="width:20%;text-align:right;padding-right:20px;">
  94. <input type="button"  value="提交" onclick="tijiao()" />
  95. </td>
  96. <td style="width:30%;text-align:left;padding-left:35px;">
  97. <input type="button"  value="取消" onclick="cancelBack()" />
  98. </td>
  99. <td style="width:30%;text-align:left;padding-left:12px;">
  100. </td>
  101. </tr>
  102. </table>
  103. </div>
  104. <table width="100%" height="50px" border="0" cellspacing="0" cellpadding="0" class="nbox11" style="padding-left:6px">
  105. <tr>
  106. <td>
  107. <div class="contentBody"><table class="nbox14 blackn12" border="0" cellspacing="0" cellpadding="0" width="800px">
  108. <tr >
  109. <td class="td2"></td>
  110. <td class="td2">
  111. </td>
  112. </tr>
  113. </table>
  114. </div>
  115. </td>
  116. </tr>
  117. </table>
  118. <table width="100%" height="10" border="0" cellpadding="0" cellspacing="0" id="box_foot">
  119. <tr>
  120. <td class="left" width="7"></td>
  121. <td class="mid"> </td>
  122. <td class="right" width="7"></td>
  123. </tr>
  124. </table>
  125. </form>
  126. </div>
  127. </body>
  128. </html>
  129. <script>
  130. var path=document.getElementById("path").value;
  131. var addSuccess=document.getElementById("addSuccess").value;
  132. if($.trim(addSuccess)=="addSuccess"){
  133. //alert("addSuccess");
  134. var urlpath=path+"/tempUser/listTempUser.action";
  135. window.location.href=urlpath;
  136. }
  137. function cancelBack(){
  138. var urlpath=path+"/tempUser/listTempUser.action";
  139. window.location.href=urlpath;
  140. }
  141. function testformsubmit(){
  142. var testform=document.getElementById("testform");
  143. testform.submit();
  144. }
  145. function getUploadPhotoUrl(){
  146. $.ajax({
  147. type: "POST",
  148. url: "some.php",
  149. data: "name=John&location=Boston",
  150. success: function(msg){
  151. alert( "Data Saved: " + msg );
  152. }
  153. });
  154. }
  155. function  addTempUser(){
  156. var urlpath=path+"/tempUser/addTempUser.action";
  157. $.ajax({
  158. type: "POST",
  159. url: "some.php",
  160. data: "name=John&location=Boston",
  161. success: function(msg){
  162. alert( "Data Saved: " + msg );
  163. }
  164. });
  165. }
  166. function tijiao(){
  167. $("#sex").val($("#fakesex").val());
  168. $("#job_level").val($("#fakejob_level").val());
  169. $("#remark").val($("#fakeremark").val());
  170. //alert($("#sex").val()+$("#job_level").val()+$("#remark").val());
  171. if (validateAddTempUser()) {
  172. $('#formadd').submit();
  173. }
  174. }
  175. function validateAddTempUser(){
  176. var flag=true;//成功为true
  177. var alertStr="";
  178. var uname=$('#uname').val();
  179. var upass=$('#upass').val();
  180. var realname=$('#realname').val();
  181. var email=$('#email').val();
  182. var cellphone=$('#cellphone').val();
  183. var ext=$('#ext').val();
  184. var phone=$('#phone').val();
  185. var job_level=$('#fakejob_level').val();
  186. var remark=$('#remark').val();
  187. var sex=$("#fakesex").val();
  188. var localPhotoUrl=$("#localPhotoUrl").val();
  189. if(ValidateUtil.isNull(uname)){
  190. flag=false;
  191. alertStr+="账号不可为空!\r\n";
  192. }
  193. if(ValidateUtil.isNull(sex)){
  194. flag=false;
  195. alertStr+="请选择性别!\r\n";
  196. }
  197. if(ValidateUtil.isNull(job_level)){
  198. flag=false;
  199. alertStr+="请选择职级!\r\n";
  200. }
  201. if(ValidateUtil.isNull(localPhotoUrl)){
  202. flag=false;
  203. alertStr+="请上传照片!\r\n";
  204. }
  205. if(!flag){
  206. alert(alertStr);
  207. }
  208. return flag;
  209. }
  210. /*
  211. var isRightUploadPhotoFalg=false;
  212. function shangchuan(){
  213. isRightUploadPhotoFalg=false;
  214. var photoUrl = document.getElementById("uploadPhoto").value;
  215. var jobNumber=$('#uname').val();
  216. var urlpath=path+"/tempUser/uploadPhotoToTempDir.action?photoUrl="+photoUrl+"&jobNumber="+jobNumber;
  217. var tempUrl="";
  218. $.ajax({
  219. type: "POST",
  220. url: urlpath,
  221. success: function(msg){
  222. var mm=$.trim(msg);
  223. if(msg=="NO"){
  224. }else{
  225. tempUrl=path+mm;
  226. //js换图片
  227. var hhtt="<img src=\""+tempUrl+"\" id=\"tempPhotoFileUrl\"/>";
  228. $("#uploadPhotoView").html(hhtt);
  229. //uploadPhotoViewParent
  230. $("#uploadPhotoViewParent").html("");
  231. $("#uploadPhotoViewParent").hide();
  232. isRightUploadPhotoFalg=true;
  233. alert(mm);
  234. document.getElementById("localPhotoUrl").value=mm;
  235. }
  236. }
  237. });
  238. }
  239. function strutsUpload(){
  240. alert("strutsUpload");
  241. var strutsFormPhoto=document.getElementById("strutsFormPhoto");
  242. strutsFormPhoto.submit();
  243. }
  244. */
  245. $("#uname").blur( function () {
  246. //给子页面赋值
  247. var jobnum=document.getElementById("uname").value;
  248. window.frames[0].window.receivJobNum(jobnum);
  249. } );
  250. function tt(){
  251. alert("tt");
  252. }
  253. //上传成功后,需要页面显示图片的web路径和在服务器上的路径
  254. function rebackUrl(showurl,writeurl){
  255. //alert(showurl+"--"+writeurl);
  256. document.getElementById("localPhotoUrl").value=writeurl;
  257. }
  258. </script>


里面嵌套的照片页面photo.jsp

[html] view plaincopy
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
  2. <%@ taglib uri="/struts-tags" prefix="s"%>
  3. <%@ page import="org.hd.tempuser.model.TempUser" %>
  4. <%
  5. String path = request.getContextPath();
  6. %>
  7. <%
  8. String addSuccess = "";
  9. if(request.getAttribute("addSuccess")!=null){
  10. addSuccess=(String)request.getAttribute("addSuccess");
  11. }
  12. %>
  13. <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
  14. <head>
  15. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  16. <link href="<%=path%>/resource/css/style.css" rel="stylesheet" type="text/css" />
  17. <script src="<%=path%>/script/jquery-1.7.1.js" type="text/javascript"></script>
  18. </head>
  19. <body style="background:#f3f3f3">
  20. <input type="hidden" id="path" value="<%=path%>" />
  21. 请上传图片
  22. <form id="testform" action="<%=path%>/upphoto/upphotoServlet" method="post" enctype="multipart/form-data">
  23. <input type="file"  id="testfile" name="uploadPhoto" class="inputbox1" style="width:175px;" value=""/>
  24. <input type="hidden"  id="gonghao" name="gonghao" value=""/>
  25. <input type="hidden"  id="jobNumberTest" name="jobNumberTest" value="gh.value"/>
  26. <input type="button"  value="上传" onclick="testformsubmit()" />
  27. </form>
  28. </body>
  29. </html>
  30. <script>
  31. var path=document.getElementById("path").value;
  32. function testformsubmit(){
  33. var testform=document.getElementById("testform");
  34. var gonghao=document.getElementById("gonghao").value;
  35. if(gonghao==null||gonghao==""||gonghao=="null"){
  36. alert("请先输入账号!");
  37. }else{
  38. testform.submit();
  39. }
  40. }
  41. function gg(){
  42. //调用父页面方法
  43. parent.window.tt();
  44. }
  45. function receivJobNum(jobnum){
  46. document.getElementById("gonghao").value=jobnum;
  47. }
  48. </script>


编辑用户的时候也需要编辑照片,但这个逻辑稍稍不一样,还是一个编辑页面,iframe中嵌套一个照片页面。

user_edit.jsp

[html] view plaincopy
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
  2. <%@ taglib uri="/struts-tags" prefix="s"%>
  3. <%@ page import="org.hd.tempuser.model.TempUser" %>
  4. <%
  5. String path = request.getContextPath();
  6. %>
  7. <%
  8. String tempuserid="";
  9. if(request.getParameter("tempuserid")!=null){
  10. tempuserid=(String)request.getParameter("tempuserid");
  11. }
  12. String editSuccess = "";
  13. if(request.getAttribute("editSuccess")!=null){
  14. editSuccess=(String)request.getAttribute("editSuccess");
  15. }
  16. %>
  17. <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
  18. <head>
  19. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  20. <link href="<%=path%>/resource/css/style.css" rel="stylesheet" type="text/css" />
  21. <script src="<%=path%>/script/jquery-1.7.1.js" type="text/javascript"></script>
  22. <script src="<%=path%>/script/queryHeader.js" type="text/javascript"></script>
  23. <script src="<%=path%>/script/main.js" type="text/javascript"></script>
  24. <script src="<%=path%>/script/plugin/plugin_core.js" type="text/javascript"></script>
  25. <script src="<%=path%>/script/plugin/calendar/calendar_util.js" type="text/javascript"></script>
  26. <script src="<%=path%>/script/plugin/calendar/calendar.js" type="text/javascript"></script>
  27. <script src="<%=path%>/script/hd/validate.js" type="text/javascript"></script>
  28. </head>
  29. <body style="background:#828282">
  30. <input type="hidden" id="path" value="<%=path%>" />
  31. <input type="hidden" id="tempuserid" value="<%=tempuserid%>" />
  32. <input type="hidden" id="editSuccess" value="<%=editSuccess%>" />
  33. <form id="formedit" method="post" action="<%=path%>/tempUser/submitEditTempUser.action">
  34. <input type="hidden" id="ischangePhoto" name="ischangePhoto" value="NO" />
  35. <input type="hidden" id="localPhotoUrl" name="localPhotoUrl" value="" />
  36. <input type="hidden" id="oldlocalPhotoUrl" name="oldlocalPhotoUrl" value="<s:property value='#request.editTempUser.tempUrl.trim()'/>  " />
  37. <input type="hidden" id="hduid" name="editTempUser.hduid" value="<s:property value='#request.editTempUser.hduid.trim()'/>  " />
  38. <input type="hidden" id="sex"  name="editTempUser.sex" value="" />
  39. <input type="hidden" id="job_level"  name="editTempUser.job_level" value="" />
  40. <input type="hidden" id="remark" name="editTempUser.remark"  value="" />
  41. <!-- 临时转换值 -->
  42. <input type="hidden" id="tempsex"   value="<s:property value='#request.editTempUser.sex'/>" />
  43. <input type="hidden" id="tempjob_level"  value="<s:property value='#request.editTempUser.job_level'/>" />
  44. <table width="100%" height="30" border="0" cellspacing="0" cellpadding="0" id="box_title">
  45. <tr>
  46. <td class="left" width="6"></td>
  47. <td class="title">编辑坐席信息</td>
  48. </tr>
  49. </table>
  50. <table width="100%" height="160px" border="0" cellspacing="0" cellpadding="0" class="nbox11" style="padding-left:6px">
  51. <tr>
  52. <td>
  53. <div class="contentBody">
  54. <table class="nbox14 blackn12" border="0" cellspacing="0" cellpadding="0" width="800px">
  55. <tr >
  56. <td class="td1">账号:</td><td class="td2"><input type="text" value="<s:property value='#request.editTempUser.uname'/>  " name="editTempUser.uname" class="inputbox1" id="uname" style="width:175px;" </td>
  57. <td class="td1">性别:</td><td class="td2"><select style="width: 178px; height: 21px" id="fakesex" class="blackn12" name="editTempUser.fake"><option value=''>...请选择</option><option value='男'></option><option value='女'></option></select></td>
  58. </tr>
  59. <tr>
  60. <td class="td1">密码:</td><td class="td2"><input type="text" value="<s:property value='#request.editTempUser.upass'/>"  name="editTempUser.upass" class="inputbox1" id="upass" style="width:175px;" </td>
  61. <td class="td1">姓名:</td><td class="td2"><input type="text"  value="<s:property value='#request.editTempUser.realname'/>"  name="editTempUser.realname" class="inputbox1" id="realname" style="width:175px;" </td>
  62. </tr>
  63. <tr>
  64. <td class="td1">邮件地址:</td><td class="td2"><input type="text"  value="<s:property value='#request.editTempUser.email'/>"  name="editTempUser.email" class="inputbox1" id="email" style="width:175px;" </td>
  65. <td class="td1">手机号码:</td><td class="td2"><input type="text"  value="<s:property value='#request.editTempUser.cellphone'/>"   name="editTempUser.cellphone" class="inputbox1" id="cellphone" style="width:175px;" </td>
  66. </tr>
  67. <tr >
  68. <td class="td1">分机:</td><td class="td2"><input type="text"  value="<s:property value='#request.editTempUser.ext'/>"  name="editTempUser.ext" class="inputbox1" id="ext" style="width:175px;" </td>
  69. <td class="td1">电话:</td><td class="td2"><input type="text"  value="<s:property value='#request.editTempUser.phone'/>" name="editTempUser.phone" class="inputbox1" id="phone" style="width:175px;" </td>
  70. </tr>
  71. <tr>
  72. <td class="td1">职级:</td><td class="td2"><select style="width: 178px; height: 21px" id="fakejob_level" class="blackn12" name="editTempUser.fake"><option value=''>...请选择</option><option value='坐席'>坐席</option><option value='坐席班长'>坐席班长</option></select></td>
  73. <td class="td1"></td><td class="td2"></td>
  74. </tr>
  75. </table>
  76. </div>
  77. </td>
  78. </tr>
  79. </table>
  80. <div style="background:#f3f3f3">
  81. <table width="100%" height="50px" border="0" cellpadding="0" cellspacing="0" id="box_foot">
  82. <tr>
  83. <td style="height:50px;width:160px;text-align:right;padding-right:12px;font-size:12px; color:#333; ">备注:</td>
  84. <td style="height:50px;width:50px;text-align:left;">
  85. <textarea rows="3" cols="26"  name="editTempUser.fakeremark" id="fakeremark" >
  86. <s:property value='#request.editTempUser.remark'/>
  87. </textarea>
  88. </td>
  89. <td style="height:50px;width:80px;text-align:right;padding-right:12px;font-size:12px; color:#333; ">照片:</td>
  90. <td style="height:50px;text-align:left;">
  91. <div id="photoshow" >
  92. <img src="<%=path%><s:property value='#request.editTempUser.tempUrl'/>" width="75px" height="95px" id="person_img"/>
  93. <input type="button"  onclick="editPhotoFunc()" value="编辑照片" />
  94. </div>
  95. <div id="photoiframe" style="background:#f3f3f3;display:none">
  96. <iframe src="<%=path%>/jsp/hd/home/usermanage/editphoto.jsp" name="photoframe" width="300px" height="100px" scrolling="auto">
  97. </iframe>
  98. </div>
  99. </td>
  100. </tr>
  101. </table>
  102. </div>
  103. <div style="background:#ffffff;padding-top:20px;">
  104. <table width="100%" height="30px" border="0" cellspacing="0" cellpadding="0" class="nbox11" style="padding-left:6px">
  105. <tr>
  106. <td style="width:20%;text-align:right;padding-right:12px;">
  107. </td>
  108. <td style="width:20%;text-align:right;padding-right:20px;">
  109. <input type="button"  value="提交" onclick="tijiao()" />
  110. </td>
  111. <td style="width:30%;text-align:left;padding-left:35px;">
  112. <input type="button"  value="返回" onclick="javascript:history.back(-1);" />
  113. </td>
  114. <td style="width:30%;text-align:left;padding-left:12px;">
  115. </td>
  116. </tr>
  117. </table>
  118. </div>
  119. <table width="100%" height="50px" border="0" cellspacing="0" cellpadding="0" class="nbox11" style="padding-left:6px">
  120. <tr>
  121. <td>
  122. <div class="contentBody"><table class="nbox14 blackn12" border="0" cellspacing="0" cellpadding="0" width="800px">
  123. <tr >
  124. <td class="td2"></td>
  125. <td class="td2">
  126. </td>
  127. </tr>
  128. </table>
  129. </div>
  130. </td>
  131. </tr>
  132. </table>
  133. <table width="100%" height="10" border="0" cellpadding="0" cellspacing="0" id="box_foot">
  134. <tr>
  135. <td class="left" width="7"></td>
  136. <td class="mid"> </td>
  137. <td class="right" width="7"></td>
  138. </tr>
  139. </table>
  140. </form>
  141. </body>
  142. </html>
  143. <script>
  144. var path=document.getElementById("path").value;
  145. var editSuccess=document.getElementById("editSuccess").value;
  146. if($.trim(editSuccess)=="editSuccess"){
  147. //alert("editSuccess");
  148. var urlpath=path+"/tempUser/listTempUser.action";
  149. window.location.href=urlpath;
  150. }
  151. //下拉框赋值
  152. var sexone=$.trim($("#tempsex").val());
  153. setSelectValue('fakesex',sexone);
  154. var jobone=$.trim($("#tempjob_level").val());
  155. setSelectValue('fakejob_level',jobone);
  156. function setSelectValue(sid,va){
  157. var strva=$.trim(va);
  158. var opt = document.getElementById(sid);
  159. for (var i = 0; i < opt.length; i++) {
  160. if($.trim(opt[i].innerText)==strva){
  161. opt.options[i].selected=true;
  162. }
  163. }
  164. }
  165. function editPhotoFunc(){
  166. $("#photoiframe").show();
  167. $("#photoshow").hide();
  168. }
  169. function cancelEditPhotoFunc(){
  170. $("#photoshow").show();
  171. $("#photoiframe").hide();
  172. }
  173. function testformsubmit(){
  174. var testform=document.getElementById("testform");
  175. testform.submit();
  176. }
  177. function tijiao(){
  178. var ssxx=$.trim($("#fakesex").val());
  179. $("#sex").val(ssxx);
  180. var jobll=$.trim($("#fakejob_level").val());
  181. $("#job_level").val(jobll);
  182. var fakrem=$.trim($("#fakeremark").val());
  183. $("#remark").val(fakrem);
  184. //alert($("#sex").val()+$("#job_level").val()+$("#remark").val());
  185. if (validateAddTempUser()) {
  186. $('#formedit').submit();
  187. }
  188. }
  189. function validateAddTempUser(){
  190. var flag=true;//成功为true
  191. var alertStr="";
  192. var uname=$('#uname').val();
  193. var upass=$('#upass').val();
  194. var realname=$('#realname').val();
  195. var email=$('#email').val();
  196. var cellphone=$('#cellphone').val();
  197. var ext=$('#ext').val();
  198. var phone=$('#phone').val();
  199. var job_level=$('#fakejob_level').val();
  200. var remark=$('#remark').val();
  201. var sex=$("#fakesex").val();
  202. var localPhotoUrl=$("#localPhotoUrl").val();
  203. var ischangePhoto=$.trim($("#ischangePhoto").val());
  204. if(ValidateUtil.isNull(uname)){
  205. flag=false;
  206. alertStr+="账号不可为空!\r\n";
  207. }
  208. if(ValidateUtil.isNull(sex)){
  209. flag=false;
  210. alertStr+="请选择性别!\r\n";
  211. }
  212. if(ValidateUtil.isNull(job_level)){
  213. flag=false;
  214. alertStr+="请选择职级!\r\n";
  215. }
  216. if(ischangePhoto=="YES"){
  217. var local=$.trim($("#localPhotoUrl").val());
  218. if(local==""){
  219. alertStr+="请上传照片!\r\n";
  220. }
  221. }else{
  222. document.getElementById("localPhotoUrl").value=document.getElementById("oldlocalPhotoUrl").value;
  223. }
  224. if(!flag){
  225. alert(alertStr);
  226. }
  227. return flag;
  228. }
  229. $("#uname").blur( function () {
  230. //给子页面赋值
  231. var jobnum=document.getElementById("uname").value;
  232. window.frames[0].window.receivJobNum(jobnum);
  233. } );
  234. //给子页面赋值,这个是为了子页面调用
  235. function geivUnameToChild(){
  236. var jobnum=document.getElementById("uname").value;
  237. window.frames[0].window.receivJobNum(jobnum);
  238. }
  239. function tt(){
  240. alert("tt");
  241. }
  242. //上传成功后,需要页面显示图片的web路径和在服务器上的路径
  243. function rebackUrl(showurl,writeurl){
  244. //alert(showurl+"--"+writeurl);
  245. $("#ischangePhoto").val("YES");
  246. document.getElementById("localPhotoUrl").value=writeurl;
  247. //刷新子页面
  248. }
  249. </script>


editphoto.jsp

[html] view plaincopy
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
  2. <%@ taglib uri="/struts-tags" prefix="s"%>
  3. <%@ page import="org.hd.tempuser.model.TempUser" %>
  4. <%
  5. String path = request.getContextPath();
  6. %>
  7. <%
  8. String addSuccess = "";
  9. if(request.getAttribute("addSuccess")!=null){
  10. addSuccess=(String)request.getAttribute("addSuccess");
  11. }
  12. %>
  13. <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
  14. <head>
  15. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  16. <link href="<%=path%>/resource/css/style.css" rel="stylesheet" type="text/css" />
  17. <script src="<%=path%>/script/jquery-1.7.1.js" type="text/javascript"></script>
  18. </head>
  19. <body style="background:#f3f3f3">
  20. <input type="hidden" id="path" value="<%=path%>" />
  21. 请上传图片
  22. <form id="testform" action="<%=path%>/upphoto/upphotoServlet" method="post" enctype="multipart/form-data">
  23. <input type="file"  id="testfile" name="uploadPhoto" class="inputbox1" style="width:175px;" value=""/>
  24. <input type="hidden"  id="gonghao" name="gonghao" value=""/>
  25. <input type="hidden"  id="jobNumberTest" name="jobNumberTest" value="gh.value"/>
  26. <input type="button"  value="上传" onclick="testformsubmit()" />
  27. <input type="button"  value="取消" onclick="cancelPhoto()" />
  28. </form>
  29. </body>
  30. </html>
  31. <script>
  32. var path=document.getElementById("path").value;
  33. //获取工号
  34. parent.window.geivUnameToChild();
  35. function testformsubmit(){
  36. var testform=document.getElementById("testform");
  37. var gonghao=document.getElementById("gonghao").value;
  38. if(gonghao==null||gonghao==""||gonghao=="null"){
  39. alert("请先输入账号!");
  40. }else{
  41. testform.submit();
  42. }
  43. }
  44. function gg(){
  45. //调用父页面方法
  46. parent.window.tt();
  47. }
  48. function receivJobNum(jobnum){
  49. document.getElementById("gonghao").value=jobnum;
  50. }
  51. function cancelPhoto(){
  52. parent.window.cancelEditPhotoFunc();
  53. }
  54. </script>



user_view.jsp

[html] view plaincopy
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
  2. <%@ taglib uri="/struts-tags" prefix="s"%>
  3. <%@ page import="org.hd.tempuser.model.TempUser" %>
  4. <%
  5. String path = request.getContextPath();
  6. %>
  7. <%
  8. String tempuserid="";
  9. if(request.getParameter("tempuserid")!=null){
  10. tempuserid=(String)request.getParameter("tempuserid");
  11. }
  12. %>
  13. <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
  14. <head>
  15. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  16. <link href="<%=path%>/resource/css/style.css" rel="stylesheet" type="text/css" />
  17. <script src="<%=path%>/script/jquery-1.7.1.js" type="text/javascript"></script>
  18. <script src="<%=path%>/script/queryHeader.js" type="text/javascript"></script>
  19. <script src="<%=path%>/script/main.js" type="text/javascript"></script>
  20. <script src="<%=path%>/script/plugin/plugin_core.js" type="text/javascript"></script>
  21. <script src="<%=path%>/script/plugin/calendar/calendar_util.js" type="text/javascript"></script>
  22. <script src="<%=path%>/script/plugin/calendar/calendar.js" type="text/javascript"></script>
  23. </head>
  24. <body style="background:#828282">
  25. <input type="hidden" id="path" value="<%=path%>" />
  26. <input type="hidden" id="tempuserid" value="<%=tempuserid%>" />
  27. <form id="formadd" method="post" action="<%=path%>/tempUser/viewTempUser.action">
  28. <input type="hidden" id="localPhotoUrl" name="localPhotoUrl" value="" />
  29. <table width="100%" height="30" border="0" cellspacing="0" cellpadding="0" id="box_title">
  30. <tr>
  31. <td class="left" width="6"></td>
  32. <td class="title">详细信息</td>
  33. </tr>
  34. </table>
  35. <table width="100%" height="160px" border="0" cellspacing="0" cellpadding="0" class="nbox11" style="padding-left:6px">
  36. <tr>
  37. <td>
  38. <div class="contentBody">
  39. <table class="nbox14 blackn12" border="0" cellspacing="0" cellpadding="0" width="800px">
  40. <tr >
  41. <td class="td1">账号:</td><td class="td2"><input type="text" disabled readonly value="<s:property value='#request.viewTempUser.uname'/>  " name="viewTempUser.uname" class="inputbox1" id="uname" style="width:175px;" /></td>
  42. <td class="td1">性别:</td><td class="td2">
  43. <input type="text"  disabled readonly value="<s:property value='#request.viewTempUser.sex'/>  " name="viewTempUser.sex" class="inputbox1" id="sex" style="width:175px;" />
  44. </td>
  45. </tr>
  46. <tr>
  47. <td class="td1">密码:</td><td class="td2"><input type="text"  disabled  readonly value="<s:property value='#request.viewTempUser.upass'/>"  name="viewTempUser.upass" class="inputbox1" id="upass" style="width:175px;" /></td>
  48. <td class="td1">姓名:</td><td class="td2"><input type="text"   disabled  readonly value="<s:property value='#request.viewTempUser.realname'/>"  name="viewTempUser.realname" class="inputbox1" id="realname" style="width:175px;" /></td>
  49. </tr>
  50. <tr>
  51. <td class="td1">邮件地址:</td><td class="td2"><input type="text"   disabled readonly  value="<s:property value='#request.viewTempUser.email'/>"  name="viewTempUser.email" class="inputbox1" id="email" style="width:175px;" /></td>
  52. <td class="td1">手机号码:</td><td class="td2"><input type="text"   disabled readonly  value="<s:property value='#request.viewTempUser.cellphone'/>"   name="viewTempUser.cellphone" class="inputbox1" id="cellphone" style="width:175px;"/> </td>
  53. </tr>
  54. <tr >
  55. <td class="td1">分机:</td><td class="td2"><input type="text"  disabled  readonly  value="<s:property value='#request.viewTempUser.ext'/>"  name="viewTempUser.ext" class="inputbox1" id="ext" style="width:175px;" /></td>
  56. <td class="td1">电话:</td><td class="td2"><input type="text"  disabled  readonly  value="<s:property value='#request.viewTempUser.phone'/>" name="viewTempUser.phone" class="inputbox1" id="phone" style="width:175px;" /></td>
  57. </tr>
  58. <tr>
  59. <td class="td1">职级:</td><td class="td2">
  60. <input type="text"  disabled readonly value="<s:property value='#request.viewTempUser.job_level'/>  " name="viewTempUser.job_level" class="inputbox1" id="job_level" style="width:175px;" />
  61. </td>
  62. <td class="td1"></td><td class="td2"></td>
  63. </tr>
  64. </table>
  65. </div>
  66. </td>
  67. </tr>
  68. </table>
  69. <div style="background:#f3f3f3">
  70. <table width="100%" height="50px" border="0" cellpadding="0" cellspacing="0" id="box_foot">
  71. <tr>
  72. <td style="height:50px;width:160px;text-align:right;padding-right:12px;font-size:12px; color:#333; ">备注:</td>
  73. <td style="height:50px;width:50px;text-align:left;">
  74. <textarea  disabled readonly rows="3" cols="26"  name="addTempUser.fakeremark" id="fakeremark" >
  75. <s:property value='#request.viewTempUser.remark'/>
  76. </textarea>
  77. </td>
  78. <td style="height:50px;width:80px;text-align:right;padding-right:12px;font-size:12px; color:#333; ">照片:</td>
  79. <td style="height:50px;text-align:left;">
  80. <img src="<%=path%><s:property value='#request.viewTempUser.tempUrl'/>" width="75px" height="95px" id="person_img"/>
  81. </td>
  82. </tr>
  83. </table>
  84. </div>
  85. <div style="background:#ffffff;padding-top:20px;">
  86. <table width="100%" height="30px" border="0" cellspacing="0" cellpadding="0" class="nbox11" style="padding-left:6px">
  87. <tr>
  88. <td style="width:20%;text-align:right;padding-right:12px;">
  89. </td>
  90. <td style="width:20%;text-align:right;padding-right:20px;">
  91. </td>
  92. <td style="width:30%;text-align:left;padding-left:35px;">
  93. <input type="button"  value="返回" onclick="javascript:history.back(-1);" />
  94. </td>
  95. <td style="width:30%;text-align:left;padding-left:12px;">
  96. </td>
  97. </tr>
  98. </table>
  99. </div>
  100. <table width="100%" height="50px" border="0" cellspacing="0" cellpadding="0" class="nbox11" style="padding-left:6px">
  101. <tr>
  102. <td>
  103. <div class="contentBody"><table class="nbox14 blackn12" border="0" cellspacing="0" cellpadding="0" width="800px">
  104. <tr >
  105. <td class="td2"></td>
  106. <td class="td2">
  107. </td>
  108. </tr>
  109. </table>
  110. </div>
  111. </td>
  112. </tr>
  113. </table>
  114. <table width="100%" height="10" border="0" cellpadding="0" cellspacing="0" id="box_foot">
  115. <tr>
  116. <td class="left" width="7"></td>
  117. <td class="mid"> </td>
  118. <td class="right" width="7"></td>
  119. </tr>
  120. </table>
  121. </form>
  122. </body>
  123. </html>
  124. <script>
  125. var path=document.getElementById("path").value;
  126. </script>


要说的有几点,编辑用户可能修改照片,可能不修改。

我分了这两种情况。用一个参数来区别。

下面是所有action

AddTempUserAction.java

[html] view plaincopy
  1. package org.hd.tempuser.action;
  2. import java.io.PrintWriter;
  3. import java.sql.Blob;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;
  6. import oracle.sql.BLOB;
  7. import org.apache.struts2.ServletActionContext;
  8. import org.hd.tempuser.model.TempUser;
  9. import org.hd.tempuser.service.TempUserService;
  10. import org.hd.util.BlobUtil;
  11. import org.hibernate.SessionFactory;
  12. import org.rd.framework.common.container.ContainerManager;
  13. import org.rd.framework.hibernate.ConfigurableSessionFactoryBean;
  14. import org.rd.framework.query.sort.SortCriterion;
  15. import org.rd.framework.struts.action.CommonAction;
  16. import org.hibernate.impl.SessionFactoryImpl;
  17. import com.opensymphony.xwork2.ActionContext;
  18. public class AddTempUserAction extends CommonAction{
  19. private TempUserService tempUserService = (TempUserService)ContainerManager.getComponent(TempUserService.BEAN_ID);
  20. private TempUser addTempUser;
  21. private String localPhotoUrl="";
  22. public String addTempUser() throws Exception{
  23. ActionContext ctx = ActionContext.getContext();
  24. HttpServletResponse response = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE);
  25. HttpServletRequest request  = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST);
  26. response.setCharacterEncoding("UTF-8");
  27. PrintWriter out = response.getWriter();
  28. if(getAddTempUser()!=null){
  29. if(getLocalPhotoUrl()==null||getLocalPhotoUrl().trim().equals("")){
  30. }else{
  31. System.out.println("临时上传路径:"+getLocalPhotoUrl());
  32. String loginUserJobNum=this.getLoginUserJobNumber();
  33. tempUserService.addTempUserWriteBlob(getAddTempUser(),getLocalPhotoUrl(),loginUserJobNum);
  34. }
  35. }
  36. out.println("YES");
  37. request.setAttribute("addSuccess", "addSuccess");
  38. return SUCCESS;
  39. }
  40. public String execute() throws Exception{
  41. return SUCCESS;
  42. }
  43. public TempUser getAddTempUser() {
  44. return addTempUser;
  45. }
  46. public void setAddTempUser(TempUser addTempUser) {
  47. this.addTempUser = addTempUser;
  48. }
  49. public String getLocalPhotoUrl() {
  50. return localPhotoUrl;
  51. }
  52. public void setLocalPhotoUrl(String localPhotoUrl) {
  53. this.localPhotoUrl = localPhotoUrl;
  54. }
  55. }



DelTempUserAction.java

[html] view plaincopy
  1. package org.hd.tempuser.action;
  2. import java.io.PrintWriter;
  3. import javax.servlet.http.HttpServletRequest;
  4. import javax.servlet.http.HttpServletResponse;
  5. import org.apache.struts2.ServletActionContext;
  6. import org.hd.tempuser.model.TempUser;
  7. import org.hd.tempuser.service.TempUserService;
  8. import org.rd.framework.common.container.ContainerManager;
  9. import org.rd.framework.query.interceptor.QueryParameterAware;
  10. import org.rd.framework.query.sort.SortCriterion;
  11. import org.rd.framework.struts.action.BodyListAction;
  12. import org.rd.framework.util.DateUtils;
  13. import com.opensymphony.xwork2.ActionContext;
  14. public class DelTempUserAction extends BodyListAction implements QueryParameterAware{
  15. private TempUserService tempUserService = (TempUserService)ContainerManager.getComponent(TempUserService.BEAN_ID);
  16. private String tempuserid="";
  17. private TempUser delTempUser=null;
  18. public String delTempUser() throws Exception{
  19. ActionContext ctx = ActionContext.getContext();
  20. HttpServletResponse response = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE);
  21. HttpServletRequest request  = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST);
  22. response.setCharacterEncoding("UTF-8");
  23. PrintWriter out = response.getWriter();
  24. //      setTempuserid(request.getParameter("tempuserid"));
  25. if(request.getParameter("tempuserid")!=null&&!request.getParameter("tempuserid").trim().equals("")){
  26. tempUserService.delTempUserById(request.getParameter("tempuserid"));
  27. out.println("YES");
  28. }else{
  29. out.println("NO");
  30. }
  31. return NONE;
  32. }
  33. public String execute() throws Exception{
  34. return SUCCESS;
  35. }
  36. public String getTempuserid() {
  37. return tempuserid;
  38. }
  39. public void setTempuserid(String tempuserid) {
  40. this.tempuserid = tempuserid;
  41. }
  42. public TempUser getDelTempUser() {
  43. return delTempUser;
  44. }
  45. public void setDelTempUser(TempUser delTempUser) {
  46. this.delTempUser = delTempUser;
  47. }
  48. }



EditTempUserAction.java

[html] view plaincopy
  1. package org.hd.tempuser.action;
  2. import java.io.PrintWriter;
  3. import java.sql.Blob;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;
  6. import oracle.sql.BLOB;
  7. import org.apache.struts2.ServletActionContext;
  8. import org.hd.login.service.LoginService;
  9. import org.hd.tempuser.model.TempUser;
  10. import org.hd.tempuser.service.TempUserService;
  11. import org.hd.util.BlobUtil;
  12. import org.hd.util.RamdomUtil;
  13. import org.hibernate.SessionFactory;
  14. import org.rd.framework.common.container.ContainerManager;
  15. import org.rd.framework.hibernate.ConfigurableSessionFactoryBean;
  16. import org.rd.framework.query.sort.SortCriterion;
  17. import org.rd.framework.struts.action.CommonAction;
  18. import org.hibernate.impl.SessionFactoryImpl;
  19. import com.opensymphony.xwork2.ActionContext;
  20. public class EditTempUserAction extends CommonAction{
  21. private TempUserService tempUserService = (TempUserService)ContainerManager.getComponent(TempUserService.BEAN_ID);
  22. private LoginService hdLoginService = (LoginService)ContainerManager.getComponent(LoginService.BEAN_ID);
  23. private TempUser editTempUser;
  24. private String localPhotoUrl="";
  25. private String ischangePhoto="";
  26. public String editTempUser() throws Exception{
  27. //先取数据展现
  28. ActionContext ctx = ActionContext.getContext();
  29. HttpServletResponse response = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE);
  30. HttpServletRequest request  = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST);
  31. response.setCharacterEncoding("UTF-8");
  32. PrintWriter out = response.getWriter();
  33. if(request.getParameter("tempuserid")!=null&&!request.getParameter("tempuserid").trim().equals("")){
  34. TempUser tt=tempUserService.getTempUserById(request.getParameter("tempuserid"));
  35. String photoPath=hdLoginService.getTempPhoto(tt);
  36. photoPath+="?randomStr="+RamdomUtil.getRamdomDateStr();//加随机参数
  37. tt.setTempUrl(photoPath);
  38. setEditTempUser(tt);
  39. }else{
  40. }
  41. return SUCCESS;
  42. }
  43. public String submitEditTempUser() throws Exception{
  44. //提交数据
  45. ActionContext ctx = ActionContext.getContext();
  46. HttpServletResponse response = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE);
  47. HttpServletRequest request  = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST);
  48. response.setCharacterEncoding("UTF-8");
  49. PrintWriter out = response.getWriter();
  50. if(getEditTempUser()!=null){
  51. String hduid=getEditTempUser().getHduid().trim();
  52. getEditTempUser().setHduid(hduid);
  53. String loginUserJobNum=this.getLoginUserJobNumber();
  54. if(getIschangePhoto()!=null&&getIschangePhoto().trim().equals("YES")){
  55. //修改照片
  56. if(getLocalPhotoUrl()==null||getLocalPhotoUrl().trim().equals("")){
  57. } else {
  58. System.out.println("临时上传路径:" + getLocalPhotoUrl());
  59. tempUserService.clearPhotoBlob(getEditTempUser());
  60. tempUserService.editTempUserWriteBlob(getEditTempUser(),
  61. getLocalPhotoUrl(), loginUserJobNum);
  62. }
  63. }else{
  64. //不修改照片
  65. tempUserService.editTempUserWithoutBlob(getEditTempUser(), loginUserJobNum);
  66. }
  67. request.setAttribute("editSuccess", "editSuccess");
  68. }
  69. return SUCCESS;
  70. }
  71. public String execute() throws Exception{
  72. return SUCCESS;
  73. }
  74. public String getLocalPhotoUrl() {
  75. return localPhotoUrl;
  76. }
  77. public void setLocalPhotoUrl(String localPhotoUrl) {
  78. this.localPhotoUrl = localPhotoUrl;
  79. }
  80. public TempUser getEditTempUser() {
  81. return editTempUser;
  82. }
  83. public void setEditTempUser(TempUser editTempUser) {
  84. this.editTempUser = editTempUser;
  85. }
  86. public String getIschangePhoto() {
  87. return ischangePhoto;
  88. }
  89. public void setIschangePhoto(String ischangePhoto) {
  90. this.ischangePhoto = ischangePhoto;
  91. }
  92. }



ListTempUserAction.java

[html] view plaincopy
  1. package org.hd.tempuser.action;
  2. import org.hd.tempuser.service.TempUserService;
  3. import org.rd.framework.common.container.ContainerManager;
  4. import org.rd.framework.query.interceptor.QueryParameterAware;
  5. import org.rd.framework.query.sort.SortCriterion;
  6. import org.rd.framework.struts.action.BodyListAction;
  7. import org.rd.framework.util.DateUtils;
  8. public class ListTempUserAction extends BodyListAction implements QueryParameterAware{
  9. private TempUserService tempUserService = (TempUserService)ContainerManager.getComponent(TempUserService.BEAN_ID);
  10. public String listTempUser() throws Exception{
  11. if (firstSorter == null && null == paginationSupport.getSorter()) {
  12. firstSorter = new SortCriterion();
  13. firstSorter.setField("queryby.hduid");
  14. firstSorter.setOrder(SortCriterion.DESCENDING);
  15. }else if(firstSorter == null && paginationSupport.getSorter() != null){
  16. firstSorter = paginationSupport.getSorter();
  17. }
  18. paginationSupport.setSorter(firstSorter);
  19. bodyList = tempUserService.getTempUserList(queryParams, paginationSupport);
  20. return SUCCESS;
  21. }
  22. public String execute() throws Exception{
  23. return SUCCESS;
  24. }
  25. public String getTableid() {
  26. return "HD_USER_000";
  27. }
  28. }



ViewTempUserAction.java

[html] view plaincopy
  1. package org.hd.tempuser.action;
  2. import java.io.PrintWriter;
  3. import javax.servlet.http.HttpServletRequest;
  4. import javax.servlet.http.HttpServletResponse;
  5. import org.apache.struts2.ServletActionContext;
  6. import org.hd.login.service.LoginService;
  7. import org.hd.tempuser.model.TempUser;
  8. import org.hd.tempuser.service.TempUserService;
  9. import org.hd.util.RamdomUtil;
  10. import org.rd.framework.common.container.ContainerManager;
  11. import org.rd.framework.query.interceptor.QueryParameterAware;
  12. import org.rd.framework.query.sort.SortCriterion;
  13. import org.rd.framework.struts.action.BodyListAction;
  14. import org.rd.framework.util.DateUtils;
  15. import com.opensymphony.xwork2.ActionContext;
  16. public class ViewTempUserAction extends BodyListAction implements QueryParameterAware{
  17. private TempUserService tempUserService = (TempUserService)ContainerManager.getComponent(TempUserService.BEAN_ID);
  18. private LoginService hdLoginService = (LoginService)ContainerManager.getComponent(LoginService.BEAN_ID);
  19. private TempUser viewTempUser=null;
  20. private String command="";
  21. public String viewTempUser() throws Exception{
  22. ActionContext ctx = ActionContext.getContext();
  23. HttpServletResponse response = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE);
  24. HttpServletRequest request  = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST);
  25. response.setCharacterEncoding("UTF-8");
  26. PrintWriter out = response.getWriter();
  27. if(request.getParameter("tempuserid")!=null&&!request.getParameter("tempuserid").trim().equals("")){
  28. TempUser tt=tempUserService.getTempUserById(request.getParameter("tempuserid"));
  29. String photoPath=hdLoginService.getTempPhoto(tt);
  30. photoPath+="?randomStr="+RamdomUtil.getRamdomDateStr();//加随机参数
  31. tt.setTempUrl(photoPath);
  32. setViewTempUser(tt);
  33. }else{
  34. }
  35. return SUCCESS;
  36. }
  37. public String execute() throws Exception{
  38. return SUCCESS;
  39. }
  40. public TempUser getViewTempUser() {
  41. return viewTempUser;
  42. }
  43. public void setViewTempUser(TempUser viewTempUser) {
  44. this.viewTempUser = viewTempUser;
  45. }
  46. public String getCommand() {
  47. return command;
  48. }
  49. public void setCommand(String command) {
  50. this.command = command;
  51. }
  52. }

struts_tempuser.xml

[java] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  4. "http://struts.apache.org/dtds/struts-2.0.dtd">
  5. <struts>
  6. <package name="tempUser" extends="cx-struts-default" namespace="/tempUser">
  7. <action name="listTempUser" class="org.hd.tempuser.action.ListTempUserAction" method="listTempUser">
  8. <result name="success">/jsp/hd/home/usermanage/uesrs.jsp</result>
  9. </action>
  10. <action name="delTempUser" class="org.hd.tempuser.action.DelTempUserAction" method="delTempUser">
  11. </action>
  12. <action name="addTempUser" class="org.hd.tempuser.action.AddTempUserAction" method="addTempUser">
  13. <result name="success">/jsp/hd/home/usermanage/add_user.jsp</result>
  14. </action>
  15. <action name="viewTempUser" class="org.hd.tempuser.action.ViewTempUserAction" method="viewTempUser">
  16. <result name="success">/jsp/hd/home/usermanage/user_view.jsp</result>
  17. </action>
  18. <action name="editTempUser" class="org.hd.tempuser.action.EditTempUserAction" method="editTempUser">
  19. <result name="success">/jsp/hd/home/usermanage/user_edit.jsp</result>
  20. </action>
  21. <action name="submitEditTempUser" class="org.hd.tempuser.action.EditTempUserAction" method="submitEditTempUser">
  22. <result name="success">/jsp/hd/home/usermanage/user_edit.jsp</result>
  23. </action>
  24. <action name="uploadPhotoToTempDir" class="org.hd.tempuser.action.UploadPhotoAction" method="uploadPhotoToTempDir">
  25. </action>
  26. <action name="uploadWithStruts" class="org.hd.tempuser.action.UploadWithStrutsAction" method="uploadWithStruts">
  27. <!-- 限制图片的格式和图片的大小 -->
  28. <interceptor-ref name="fileUpload">
  29. <param name="allowedTypes">
  30. image/bmp,image/png,image/gif,image/jpeg,image/jpg
  31. </param>
  32. <param name="maximumSize">102400</param>
  33. </interceptor-ref>
  34. <!-- 默认的拦截器,必须要写 -->
  35. <interceptor-ref name="defaultStack" />
  36. <result name="success">/jsp/hd/home/usermanage/add_user.jsp</result>
  37. </action>
  38. <action name="goPageuploadWithStruts" class="org.hd.tempuser.action.UploadWithStrutsAction">
  39. <result name="success">/jsp/hd/home/usermanage/add_user.jsp</result>
  40. </action>
  41. </package>
  42. </struts>


至于读取blob,看第二篇文章吧

(二)上传图片至服务器,写入到数据库Blob字段中,以及从数据库读取Blob信息(iframe父子页面传值)


上传图片至服务器,写入到数据库Blob字段中,以及从数据库读取Blob信息(iframe父子页面传值)(1)相关推荐

  1. 上传图片至服务器,写入到数据库Blob字段中,以及从数据库读取Blob信息(iframe父子页面传值)(2)

    首先说写入oracle的Blob字段 上一文章的实现方法没有贴出来,如下: TempUserService.java [html] view plaincopy package org.hd.temp ...

  2. delphi mysql dll直接_十万火急!!!那位高手用过libmysql.dll直接连接MySql数据库?如何将二进制文件保存到blob字段中? (60分)...

    先用php+mysql将文件通过web方式保存到远程的服务器的blob字段中,然后用 delphi+libmysql.dll直接连接远程MySql数据库,再将数据复制到本地的MySql数据库中. 代码 ...

  3. 图片上传到数据库,保存到Blob字段中

    需求:从系统上传图片,将图片信息保存到数据库的blob字段中,并提供照片的查询接口 controller: package com.success.controller;import ../*** 系 ...

  4. 将页面多个下拉框的值以字符串拼接方式存放至数据库一个字段中

     1,当页面中有多个值,传入Controller并以字符串拼接方式,以","隔开存放至数据库一个字段中,页面中多个<select name="off"&g ...

  5. Java中对查出的数据计数_基础算法7:从数据库某个字段中取出现次数最多的几条数据形成“热门xxx”...

    在这里,我们需要查出所有的"出发城市"和"到达城市",并对每个城市进行计数根据其出现次数来取出几个出现次数最多的城市为热门城市 注:将多个字段的数据合并在一起并 ...

  6. 如何使用SQL批量替换数据库特定字段中部分特定数据

    1.替换数据库特定字段中部分特定数据的SQL语句 SQL语句:update 表名 set 字段名= replace(字段名,'原字符串',需要替换成的字符串') 以将表exam_major中的字段po ...

  7. cmd查看mysql数据库表_cmd中查看MySQL数据库表数据及结构

    0. 1 .cmd进入mysql安装的bin目录(C:\Program Files\XXXXXX\MySQL Server 5.6\bin) mysql -hlocalhost -uroot -p 回 ...

  8. 用python将中文/汉字写入文本文档或者从文本文档读取中文信息

    用python将中文/汉字写入文本文档或者从文本文档读取中文信息 经常有同学碰到通过python无法将汉字信息写入文本,或者无法读取文本里的汉字信息的情况,下面用一种最简单的方式解决这个问题. 写入文 ...

  9. oracle blob字段索引,在oracle 数据库中使用 Blob 字段存储 一张图片并读取

    1. 进行数据库的设置  create table image_lob(t_id varchar2(5) not null,t_image blob not null); create or repl ...

最新文章

  1. 追溯XLNet的前世今生:从Transformer到XLNet
  2. 在SQL2000怎樣用動態實現SQL2005的nvarchar(max)功能
  3. 数据库(四)之数据库表管理
  4. 【烙铁使用规范】—— 烙铁使用、温度测量规范
  5. 浅谈servlet与jsp的关系
  6. iOS:CoreData数据库的使用二(创建多个数据库表,表之间有对应关系)
  7. 网站项目常用JS,CSS等控件插件
  8. cat的实用技巧 cat>>/etc/profile<<EOF
  9. 通过笔记本设置wifi共享
  10. oracle中的rownumber,oracle中row_number和rownum的区别和联系(翻译)
  11. 077 三角函数定积分性质
  12. CentOS7安装PHP开发环境1-源码安装Nginx
  13. 自己的电脑不能连接打印机打印怎么办
  14. 手撕HashMap(原理)
  15. 华为网管地址配置实验
  16. ZOJ 3964Yet Another Game of Stones 扩展尼姆博弈
  17. CSM32RV20--RISCV核单片机RISC-V低功耗MCU开发板核心板国产32位MCU替代STM32F030系列
  18. 跳一跳作弊器上榜!GitHub 2018年十大新开源项目揭晓
  19. 三菱A系列老PLC的数据采集,MES系统采集,工业智能数据采集底层硬件方案
  20. flash 元件修改父级界面里面的元件属性

热门文章

  1. 简单python代码实例_求简洁优美的python代码例子、片段、参考资料
  2. 红外遥控c语言,NEC协议红外遥控器
  3. php markdown 文章目录,markdown 文本内跳转,生成目录
  4. 设置简体中文_键盘不好用了?看看是不是设置有问题
  5. OpenShift 4 - 如何删除Terminating状态的项目
  6. Visual Studio Code 1.43 发布
  7. 使用Jenkins在Azure Web App上进行ASP.NET Core应用程序的持续集成和部署(CI/CD)–第4天
  8. 使用Jenkins在Azure Web App上进行ASP.NET Core应用程序的持续集成和部署(CI/CD)–第3天
  9. MariaDB 10.4.9 发布,MySQL 分支数据库
  10. ASP.NET Core 3.0 发布