JSF+A4J+Spring调用ORACLE存贮过程的拙作

      近一周写了一个简单的工具,本工具是通过Spring调用ORACLE的存贮过程,然后返回一个结果集合.用到的技术有JSF\AJAX4JSF\SPRING\facelet和进度条的控制\代码着色(codepress)等.其实现页面可以参考如下:
JSF+A4J+Spring调用ORACLE存贮过程的拙作
JSF+A4J+Spring调用ORACLE存贮过程的拙作
         部分代码如下:
    faces-config.xml
xml 代码
 
  1. xml version="1.0" encoding="UTF-8"?>  
  2. >  
  3.   
  4. <faces-config>  
  5.     <application>  
  6.         <variable-resolver>  
  7.             org.springframework.web.jsf.DelegatingVariableResolver  
  8.         variable-resolver>  
  9.         <view-handler>com.sun.facelets.FaceletViewHandlerview-handler>  
  10.         <message-bundle>resources.messagesmessage-bundle>  
  11.         <locale-config>  
  12.             <default-locale>zhdefault-locale>  
  13.             <supported-locale>ensupported-locale>  
  14.         locale-config>  
  15.     application>  
  16.     <managed-bean>  
  17.         <managed-bean-name>tracePnrBeanmanaged-bean-name>  
  18.         <managed-bean-class>  
  19.             com.travelsky.analyze.action.TracePnrBean  
  20.         managed-bean-class>  
  21.         <managed-bean-scope>requestmanaged-bean-scope>  
  22.     managed-bean>  
  23.     <managed-bean>  
  24.         <managed-bean-name>tracePnrFltBeanmanaged-bean-name>  
  25.         <managed-bean-class>  
  26.             com.travelsky.analyze.action.TracePnrFltBean  
  27.         managed-bean-class>  
  28.         <managed-bean-scope>requestmanaged-bean-scope>  
  29.     managed-bean>  
  30.     <navigation-rule>  
  31.         <from-view-id>/login.xhtmlfrom-view-id>  
  32.         <navigation-case>  
  33.             <from-outcome>Okfrom-outcome>  
  34.             <to-view-id>/comein/AnalyzeMain.xhtmlto-view-id>  
  35.             <redirect>redirect>  
  36.         navigation-case>  
  37.         <navigation-case>  
  38.             <from-outcome>Ok2from-outcome>  
  39.             <to-view-id>/comein/AnalyzeTools.xhtmlto-view-id>  
  40.         navigation-case>  
  41.     navigation-rule>  
  42.     <navigation-rule>  
  43.         <from-view-id>/comein/AnalyzeMain.xhtmlfrom-view-id>  
  44.         <navigation-case>  
  45.             <from-outcome>Okfrom-outcome>  
  46.             <to-view-id>/comein/AnalyzeMain.xhtmlto-view-id>  
  47.         navigation-case>  
  48.     navigation-rule>  
  49.     <navigation-rule>  
  50.         <from-view-id>/comein/AnalyzeTools.xhtmlfrom-view-id>  
  51.         <navigation-case>  
  52.             <from-outcome>Okfrom-outcome>  
  53.             <to-view-id>/comein/AnalyzeTools.xhtmlto-view-id>  
  54.         navigation-case>  
  55.     navigation-rule>  
  56. faces-config>  
TracePnrBean.java
java 代码
 
  1. package com.travelsky.analyze.action;  
  2.   
  3. import java.io.BufferedWriter;  
  4. import java.io.FileWriter;  
  5. import java.io.IOException;  
  6. import java.text.SimpleDateFormat;  
  7. import java.util.Date;  
  8. import java.util.HashMap;  
  9. import java.util.Iterator;  
  10. import java.util.Map;  
  11. import java.util.regex.Matcher;  
  12. import java.util.regex.Pattern;  
  13.   
  14. import javax.faces.context.FacesContext;  
  15.   
  16. import org.apache.commons.lang.StringUtils;  
  17. import org.springframework.jdbc.datasource.DriverManagerDataSource;  
  18.   
  19. import com.travelsky.analyze.serviceimpl.TrancePnrManagerImpl;  
  20.   
  21. public class TracePnrBean {  
  22.     private String PnrNo;  
  23.     private String TextPath;  
  24.   
  25.     private String InputPnrNo = "请输入PNR或REF号...";  
  26.   
  27.     public String getInputPnrNo() {  
  28.         return InputPnrNo;  
  29.     }  
  30.   
  31.     public void setInputPnrNo(String inputPnrNo) {  
  32.         InputPnrNo = inputPnrNo;  
  33.     }  
  34.   
  35.     public String getPnrNo() {  
  36.         return RunTracePnr();  
  37.     }  
  38.   
  39.     public void setPnrNo(String pnrNo) {  
  40.         PnrNo = RunTracePnr();  
  41.     }  
  42.     public String getTextPath() {  
  43.         return this.OutText(RunTracePnr());  
  44.     }  
  45.   
  46.     public void setTextPath(String textPath) {  
  47.         TextPath = textPath;  
  48.     }  
  49.     public String RunTracePnr() {  
  50.         String TracePnrStr = "\n";  
  51.         DriverManagerDataSource ds = new DriverManagerDataSource();  
  52.         ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");  
  53.         ds.setUrl("jdbc:oracle:thin:@10.6.168.134:1521:dss9i");  
  54.         ds.setUsername("dss_pdata");  
  55.         ds.setPassword("dss_pdata");  
  56.         TrancePnrManagerImpl sp = new TrancePnrManagerImpl(ds, "tracepnr");  
  57.         sp.setParameter("pnr_nbr_in", java.sql.Types.VARCHAR);  
  58.         sp.setOutParameter("print_pnr", oracle.jdbc.OracleTypes.VARCHAR);  
  59.         sp.compile();  
  60.         TrancePnrManagerImpl sp2 = new TrancePnrManagerImpl(ds, "reftracepnr");  
  61.         sp2.setParameter("pnr_ref_in", java.sql.Types.VARCHAR);  
  62.         sp2.setOutParameter("print_pnr", oracle.jdbc.OracleTypes.VARCHAR);  
  63.         sp2.setOutParameter("print_pnr_sfx1", oracle.jdbc.OracleTypes.VARCHAR);  
  64.         sp2.compile();  
  65.         /** 
  66.          * 对输入的数据进行一次处理 
  67.          */  
  68.         StringUtils t1 = new StringUtils();  
  69.         String InputPnrNoList = this.getInputPnrNo();  
  70.         InputPnrNoList = t1.deleteWhitespace(InputPnrNoList);  
  71.         String[] SInputPnrNo = t1.split(InputPnrNoList, ",");  
  72.         for (int j = 0; j < SInputPnrNo.length; j++) {  
  73.             String PnrRef = SInputPnrNo[j];  
  74.             // 传入输入参数值  
  75.             if (PnrRef.length() == 9) {  
  76.                 Map in = new HashMap(1);  
  77.                 in.put("pnr_nbr_in", PnrRef);  
  78.                 sp.SetInParam(in);  
  79.   
  80.                 // 执行存储过程  
  81.                 Map m = sp.execute();  
  82.                 Iterator i = m.keySet().iterator();  
  83.                 while (i.hasNext()) {  
  84.                     String key = i.next().toString();  
  85.                     TracePnrStr += m.get(key);                    
  86.                 }  
  87.             }  
  88.             if (PnrRef.length() == 5) {  
  89.                 Map in = new HashMap(1);  
  90.                 in.put("pnr_ref_in", PnrRef);  
  91.                 sp2.SetInParam(in);  
  92.   
  93.                 // 执行存储过程  
  94.                 Map m = sp2.execute();  
  95.   
  96.                 // Map m = sp.set.get(0);// ReultSet的第一条记录  
  97.                 // set定义为SpringStoredProcedure的属性用于接收回调时的数据  
  98.                 // 如果有多个输出参数,应该在每个输出参数的回调方法中生成该输出  
  99.                 // 参数对应的ArrayList,然后加到一个成员变量的数据结构中。  
  100.                 Iterator i = m.keySet().iterator();  
  101.                 while (i.hasNext()) {  
  102.                     String key = i.next().toString();  
  103.                     TracePnrStr += m.get(key);  
  104.                 }  
  105.             }  
  106.             TracePnrStr = t1.replace(TracePnrStr, "<newline>"</newline>"\n");  
  107.             TracePnrStr = TracePnrStr + "\n \n";// 最后一个加换行  
  108.         }  
  109.         //this.OutText(TracePnrStr);  
  110.         return TracePnrStr;  
  111.     }  
  112.   
  113.       
  114.     public String Finish(){  
  115.         return "Ok";  
  116.     }  
  117.   
  118.     public String OutText(String TracePnrStr) {       
  119.         SimpleDateFormat myFmt=new SimpleDateFormat("yyyyMMddHHmmss");        
  120.         String PathText = myFmt.format(new Date());  
  121.         try {  
  122.             BufferedWriter out = new BufferedWriter(new FileWriter(  
  123.                     "D:\\tomcat5523\\webapps\\analyze\\doc\\pnr"+PathText+".txt"true));// 主要就是这个true  
  124.             //out.newLine();// 如果不另起一行的话就注释掉  
  125.             out.write(TracePnrStr);  
  126.             out.close();  
  127.         } catch (IOException e) {  
  128.             e.printStackTrace();  
  129.         }  
  130.         return "pnr"+PathText+".txt";  
  131.     }  
  132.   
  133.   
  134.   
  135. }