隨筆-7  評論-0  文章-0  trackbacks-0
            2009年6月24日
            Java的核心API是非常龐大的,這給開發者來說帶來了很大的方便,經常人有評論,java讓程序員變傻。
          但是一些內容我認為是必須掌握的,否則不可以熟練運用java,也不會使用就很難辦了。
          1、java.lang包下的80%以上的類的功能的靈活運用。
          2、java.util包下的80%以上的類的靈活運用,特別是集合類體系、正規表達式、時間、屬性、和Timer. 3、java.io包下的60%以上的類的使用,理解IO體系的基于管道模型的設計思路以及常用IO類的特性和使用場合。
          4、java.math包下的100%的內容。
          5、java.net包下的60%以上的內容,對各個類的功能比較熟悉。
          6、java.text包下的60%以上的內容,特別是各種格式化類。
          7、熟練運用JDBC. 8、java.security包下40%以上的內容,如果對于安全沒有接觸的話根本就不可能掌握java. 9、AWT的基本內容,包括各種組件事件、監聽器、布局管理器、常用組件、打印。
          10、Swing的基本內容,和AWT的要求類似。
          11、XML處理,熟悉SAX、DOM以及JDOM的優缺點并且能夠使用其中的一種完成XML的解析及內容處理
          以上文章摘自——北大青鳥徐州藍海 www.xzbenet.com www.lanh.cn
          posted @ 2009-09-11 15:25 sillyha 閱讀(161) | 評論 (0)編輯 收藏
          鑒于windows操作系統及office辦公平臺,在個人桌面上的壟斷地位,使得excel/word/ppt等文件被廣泛應用。通過java讀 寫excel文檔是編程開發中常見問題,比如在swing和web應用中經常遇到。目前通過Java操作Excel的類庫大致有[1]:
              1、POI,大名鼎鼎的Apache上的項目。
              2、Java Excel API(亦簡稱jexcelapi或jxl),純java的excel開發包。
              3、jexcel,jxl的衍生品,適宜于Swing開發。
              4、jxls,依賴于POI,基于excel模板的可定制化報表輸出工具。
              5、Jacob (Java COM Bridge),顧名思義,是采用橋接方式訪問COM組件及Win32類庫。
              6、其它方式,如數據導出到html格式的表格中,再另存為xls文檔

              使用比較
              POI、jxl、jexcel可以劃歸為一類,通過java封裝了Excel的操作,所以需要折騰Workbook,Sheet,Cell等對象,顧及excel的每個細節。這種方式,優點是功能強大。缺點是代碼冗長拖沓,閱讀困難。
              jxls雖然是基于POI,但其最大突破在于預先定制好Excel模板(如字段、格式、圖表等),運行期綁定數據即可呈現多樣化報表。其優點是編程輕松,功能靈活方便。缺點是對于過于動態化報表不太適用(如輸出字段、格式非常多變)。
              Jacob和COM模型粘在一起,自然被純java的擁躉者所不顧。所以,應用不是很廣。
           

              jxls初體驗

              業務部門經常需要我們技術部給推送一些定期報表,這些報表的字段及格式都是預定義好的。顯而易見,在這種場合,jxls是再適合不過的工具了。只要定義好 輸出報表的模板,綁定查詢出的數據即大功告成。日常維護起來也很方便,比如加減字段、改變展現方式、嵌入excel自動圖表等都能輕松搞定。
              百聞不如一見,從jxls主頁[5]上下載了jXLS v.0.9.6(不知何故,自20080409日后沒有再更新),安裝起來運行其中自帶的范例。自帶范例可以通過maven來編譯,偶試了試編譯成功,但 不知道怎么運行范例。后來沒轍,把范例導到eclipse中進行編譯運行。編譯時下載了最新的poi-3.2-FINAL-20081019.jar,結 果編譯成功,但運行報錯
              java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFCell.setEncoding(S)V
              后來換成poi-3.1-FINAL-20080629.jar,又報別的錯,最后好不容易從CSDN上下載了poi-3.0.1-FINAL- 200705.jar,總算運行成功。體驗了一下,效果非常好。讓人不解的是,在POI主站上只能下載到最新的POI3.2版本,老版本就是找不到。

              參考資料
              1、http://schmidt.devlib.org/java/libraries-excel.html,java操作Excel的類庫清單
              2、http://jakarta.apache.org/poi/,POI主頁
              3、http://www.andykhan.com/jexcelapi/index.html,jxl主頁
              4、http://www.teamdev.com/jexcel/index.jsf,jexcel主頁。
              5、http://jxls.sourceforge.net/,jxls主頁
              6、http://jacob-project.wiki.sourceforge.net/,Jacob主頁

          posted @ 2009-07-14 11:24 sillyha 閱讀(2614) | 評論 (0)編輯 收藏

          1、

          org.springframework.orm.ObjectRetrievalFailureException: Object of class [com.xindeco.myregister.pojo.MyRegisterInfo] with identifier [14]: not found

          MyRegisterInfo在數據庫沒有identifier [14]對象。

          2、

          org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception is org.hibernate.MappingException: Repeated column in mapping for entity: com.xindeco.myregister.pojo.MyRegisterInfo column: password (should be mapped with insert="false" update="false")

          出錯原因:password 和repassword同時對應數據庫表中的password一列,同時update和insert都設為true。

          xml文件如下:

              <property name="password"

                                    type="java.lang.String"

                                    update="true"

                                    insert="true"

                                    access="property"

                                    column="password"

                                    length = "32"

                                    />

                                   <property name="repassword"

                                    type="java.lang.String"

                                    update="false"

                                    insert="false"

                                    access="property"

                                    column="password"

                                    length = "32"

                                    />

          解決的方法:

          將repassword的insert和update設為false。

          3、

          org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed;

          nested exception is org.hibernate.PropertyNotFoundException: Could not find a getter for ID in class

          錯誤原因:hibernate的映射文件中ID是大寫的,而pojo的類中id是小寫的

          注意事項:每個pojo的類都要繼承abstractEntity,其中abstractEntity類有個ID的屬性要重寫

          public abstract class AbstractEntity

              implements Entity, BaseDTO {

              abstract public long getID();

              abstract public void setID(long id);

              public int hashCode() {

                  return (int)this.getID();

              }

              public boolean equals(Object obj) {

                  if (obj == this) {

                      return true;

                  }

                  if (obj instanceof Entity) {

                      return this.getID() == ( (Entity) obj).getID();

                  }

                  return false;

              }

          }

          4、

          org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER) - turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition

          錯誤原因:

          在application.xml文件中deleteRegister方法以delete開頭,并沒有被設定為可更改的,應如下設置:

          <!--為事物創建代理類,并指定方法的事物類型-->

          <bean id="baseTxProxy" lazy-init="true" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

              <property name="transactionManager">

                <ref bean="transactionManager"/>

              </property>

              <property name="transactionAttributes">

                <props>

                  <prop key="add*">PROPAGATION_REQUIRED</prop>

                  <prop key="cancel*">PROPAGATION_REQUIRED</prop>

                     </props>

              </property>

          </bean>

          加上一行

          <prop key="delete*">PROPAGATION_REQUIRED</prop>

          5、

             ERROR org.apache.struts.util.RequestUtils - Error creating form bean of class com.xindeco.business.web.form.GraAppInfoForm

          public class GraAppInfoForm

          extends ActionForm 錯誤寫成

          public abstratic class GraAppInfoForm

          extends ActionForm

          6、

          2006-04-25 08:56:38,495 ERROR com.xindeco.business.web.action.GraAppAction - com.xindeco.business.web.action.GraAppAction@8e2fb5

          java.lang.ClassCastException: $Proxy0

          at com.xindeco.business.web.action.GraAppAction.newone(GraAppAction.java:30)

          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

          at java.lang.reflect.Method.invoke(Method.java:585)

          at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:274)

          at com.xindeco.core.web.action.BaseAction.dispatchMethod(BaseAction.java:153)

          at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:194)

          actioin類中的newone方法如下:

          public class GraAppAction

              extends BaseAction {

              public ActionForward newone(ActionMapping mapping, ActionForm form,

                                        HttpServletRequest request,

                                        HttpServletResponse response) throws Exception {

                 GraAppService graservice = (GraAppService) this.getBean("GraAppService");

          }

          applicationcontext中的GraAppService的配置如下:

              <bean id="GraAppDAO" class="com.xindeco.business.dao.impl.GraAppDAOImpl">

              <property name="support">

                <ref local="support"/>

              </property>

              <property name="sessionFactory">

                <ref local="sessionFactory"/>

              </property>

          </bean>

          <bean id="GraAppService" parent="baseTxProxy">

              <property name="target">

                <bean class="com.xindeco.business.service.impl.GraAppServiceImpl" autowire="byName">

                  <property name="baseDAO">

                    <ref bean="GraAppDAO"/>

                  </property>

                </bean>

              </property>

          </bean>

          因此this.getBean("GraAppService");是為了得到GraAppServicImpl類的實現。GraAppService是interface

          public class GraAppServiceImpl extends BaseServiceImpl

              implements GraAppService{

          }

          7、org.hibernate.hql.ast.QuerySyntaxException: Demand is not mapped. [from Demand where unitid = ? and needNum > usedNeedNum]

          hibernate.cfg.xml沒有配置Demand.hbm.xml文件的目錄

          8、org.springframework.jdbc.BadSqlGrammarException: Bad SQL grammar [] in task 'Hibernate operation'; nested exception is java.sql.SQLException: 列名 'id' 無效。

          java.sql.SQLException: 列名 'name' 無效。

          因為hibernate聲明的id,name的columnid屬性沒有與數據庫的字段對應,所以id,name無效。

          9、java.lang.NumberFormatException: null

          at java.lang.Integer.parseInt(Integer.java:415)

          at java.lang.Integer.parseInt(Integer.java:497)

          at com.xindeco.business.service.impl.DemandServiceImpl.findDemandListByUnitId(DemandServiceImpl.java:33)

          錯誤語句為

          needNum = Integer.parseInt(demand.getNeedNum());

          usedNeedNum = Integer.parseInt(demand.getUsedNeedNum());

          因為demand.getUsedNeedNum()==null,無法轉化為string 類型,

          10、rg.apache.jasper.JasperException: /GraAppInfo/GraAppInfoNew.jsp(343,29) According to TLD, tag bean:write must be empty, but is not

          錯誤的原因:

                 <select name="politicsID" >

                       <option value="">請選擇</option>

                 <logic:notEmpty name="politicsList">

                          <logic:iterate id="politics" name="politicsList">

                 </logic:notEmpty>

                 <option value="<bean:write name="politics" property="codeID"/>"><bean:write name="politics" property="codeName"/></option>

                 </logic:iterate>

          </select>

          就因為少了/>

          以后懂得通過查找字數,來檢查錯誤

          11、2006-04-26 13:27:54,812 ERROR com.xindeco.core.util.BeanUtils - bean property [Nation] copy failed

          com.xindeco.core.exception.ConvertException: org.springframework.orm.hibernate3.HibernateSystemException: Unknown entity: java.lang.String; nested exception is org.hibernate.MappingException: Unknown entity: java.lang.String

          beanUtil.beanCopy(grapojo,form,BizConstants.CONVERTER);

          要求:

          1、pojo類的屬性只有與form屬性名字相同,才能beancopy成功

          2、pojo中屬性是實體,在form中一定要用int,long表示

          出現這錯誤的原因是pojo中的屬性不是實體,而錯誤寫成:

          string

          private String nation;應改成 private Syscode nation;

          12、

          2006-04-26 14:38:37,843 ERROR com.xindeco.business.web.action.GraAppAction - com.xindeco.business.web.action.GraAppAction@fa1b2d

          java.lang.NullPointerException

          at com.xindeco.business.web.action.GraAppAction.newone(GraAppAction.java:43)

          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

          hibernate配置文件沒改,程序找不到相應的類

                  <many-to-one

                      name="FSUnit"

                      class="com.xindeco.business.pojo.EmployUnitBaseInfo"

                      cascade="none"

                      outer-join="auto"

                      update="true"

                      insert="true"

                      access="property"

                      column="fSUnit"

                  />

          其實FSUnit對應的類應該是FSUnit

                  <many-to-one

                      name="FSUnit"

                      class="com.xindeco.business.pojo.FSUnit"

                      cascade="none"

                      outer-join="auto"

                      update="true"

                      insert="true"

                      access="property"

                      column="fSUnit"

                  />

          13、

          org.hibernate.MappingException: An association from the table GraAppInfo refers to an unmapped class: com.xindeco.business.pojo.FSUnit

          錯誤原因:hibernate.cfg.xml沒有配置fsunit.hbm.xml文件的位置

          14、

          java.lang.ClassCastException: com.xindeco.business.dao.impl.GraAppDAOImpl

          at com.xindeco.business.service.impl.GraAppServiceImpl.addGraduateApp(GraAppServiceImpl.java:16)

          GraAppServiceImpl.java:16

          第16行: GraAppDAO dao = (GraAppDAO) this.getBaseDAO();//其實得到的是GraAppDAOImpl

          錯誤的原因是

          public class GraAppDAOImpl

              extends BaseDAOImpl {

          }

          沒有實現GraAppDAO接口,正確的做法是

          public class GraAppDAOImpl

              extends BaseDAOImpl implements GraAppDAO {

          }

          先繼承后實現

          15、2006-04-27 08:38:54,078 ERROR com.xindeco.business.web.action.GraAppAction - com.xindeco.business.web.action.GraAppAction@1d6399b

          java.lang.ClassCastException: com.xindeco.business.pojo.SysCode

          at org.hibernate.type.StringType.set(StringType.java:26)

          at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:63)

          at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:40)

          一般是因為hibernate聲明類型和pojo類聲明的類型不一樣,并且前面已經出現了Hibernate: insert into TGraAppInfo (name, whereFrom, degree, college, speciality, studentRelTel, remark, higherEduLength, highSchool, studyResume, normalOrNot, proxyUnit, workPost, workPlace, studentAddress, studentPostNumber, nation, appStatus) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

          的操作提示,查出錯誤的原因有:

                  <many-to-one

                      name="demand"

                      class="com.xindeco.business.pojo.Syscode"

                      cascade="none"

                      outer-join="auto"

                      update="true"

                      insert="true"

                      access="property"

                      column="demandID"

                  />

                   <property

                      name="appStatus"

                      type="int"

                      update="true"

                      insert="true"

                      access="property"

                      column="appStatus"

                      length="10"

                  />

          應改為   

                  <many-to-one

                      name="demand"

                      class="com.xindeco.business.pojo.Demand"

                      cascade="none"

                      outer-join="auto"

                      update="true"

                      insert="true"

                      access="property"

                      column="demandID"

                  />

          <many-to-one

                      name="nation"

                      class="com.xindeco.business.pojo.SysCode"

                      cascade="none"

                      outer-join="auto"

                      update="true"

                      insert="true"

                      access="property"

                      column="nation"

                  />

          16、

          org.springframework.dao.InvalidDataAccessApiUsageException: object references an unsaved transient instance - save the transient instance before flushing: com.xindeco.business.pojo.SysCode

          at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:626)

          at org.springframework.orm.hibernate3.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:570)

          at

          org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:482)

          pojo類為:

          public class GraAppInfo{

              private College college;

          }

          action 類為

          public class GraAppAction

              extends BaseAction {

                 public ActionForward add(ActionMapping mapping, ActionForm form,

                                       HttpServletRequest request,

                                       HttpServletResponse response) throws Exception {

                  graInfo.setCollege(new College());\\必須從數據庫找到college這個對象,而不能新生成

                  graInfo.getCollege().setID(graForm.getCollegeID());

                  graInfo.setAppStatus(Integer.parseInt("0"));

                service.addGraduateApp(graInfo);

          }

          public class GraAppServiceImpl extends BaseServiceImpl

              implements GraAppService{

              public boolean addGraduateApp(GraAppInfo info){

                  this.getBaseDAO().save(info);

                  return true;

              }

          }

          dao類save方法為

              getHibernateTemplate().save(obj);

          當cascade="all",插入new college 除了id和原來的記錄一樣,其他的字段全部都被更新,為null

          當cascase=“insert”,插入new college 只會把它的id插入grainfo表中,其他字段不變。

          17、java.sql.SQLException: Unable to convert between java.lang.Integer and BLOB.

          因為

                  <property

                      name="province"

                      type="com.xindeco.business.pojo.SysCode"http://不能用復雜類,

                      update="true"

                      insert="true"

                      access="property"

                      column="provinceId"

                  />

          應該改為

                      <many-to-one

                      name="province"

                      class="com.xindeco.business.pojo.SysCode"

                      cascade="none"

                      outer-join="auto"

                      update="true"

                      insert="true"

                      access="property"

                      column="provinceId"

                  />

          18、javax.servlet.jsp.JspException: Cannot create iterator for this collection

          at org.apache.struts.taglib.logic.IterateTag.doStartTag(IterateTag.java:265)

          jsp文件如下:

             <logic:notEmpty name="graduateList" >

             <logic:iterate id="graduate" name="graduateList" >

             </ogic:notEmpty >

             </ogic:iterat>

          graduateList是一個類,而logic:iterator要求必須是ArrayList,HashSet....這樣的集合類,而graduateList中一個屬性是ArrayList或HashSet的

          應改為:

          <logic:notEmpty name="graduateList" property="items">

          <logic:iterate id="graduate" name="graduateList" property="items" >

          </ogic:notEmpty >

          </ogic:iterat>

          19、2006-05-11 17:13:37,468 ERROR com.xindeco.business.web.action.GraAppAction - com.xindeco.business.web.action.GraAppAction@bc22eb

          org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed

          SysUser user= (SysUser) request.getSession().getAttribute(WebConstants.SESSION_USER);

          System.out.println(user.getRole().getRoleName());

          當hibernate session取出數據放到http session時,

          由于sysuser中role的lazy=“true”,所以沒有將RoleName放到http session中,當System.out.println(user.getRole().getRoleName());

          時,雖然http session還開著, hibernat seesion已經關閉

                  <many-to-one

                      name="role"

                      class="com.xindeco.business.pojo.SysRole"

                      lazy="false"

                      cascade="none"

                      outer-join="auto"

                      update="true"

                      insert="true"

                      access="property"

                      column="roleID"

                  />

          20、Association references unmapped class: com.xindeco.workflow.WFNode

          因為application.xml文件中沒有配置<mapping resource="com/xindeco/workflow/WFNode.hbm.xml"/>

          系統找不到WFNode

                   < set

               name = " nodes "

                      table = " WF_ROLENODES "

                      lazy = " true "

                      inverse = " false "

                      cascade = " none "

                      sort = " unsorted "

                   >

          < key column = " roleID " > </ key >               

          < many - to - many

                   class = " com.xindeco.workflow.WFNode "

                   column = " nodeId "

                   outer - join = " auto " />

                   </ set >

          posted @ 2009-06-24 11:25 sillyha| 編輯 收藏
          我們經常用的就是擴展它的接口ApplicationContext.而它的實現又有多種,我們只介紹一些常用的實現。applicationContext.xml文件是位于Src目錄下。
          第一種就是:
          ApplicationContext context = new ClassPathXmlApplicationContext(
                                               "applicationContext.xml");//用這個成功了,不過要在web-inf和src下面同時建立兩個(后來改了,只在src下面建立就可以,見后面,O(∩_∩)O~)
          第二種就是:
          ApplicationContext context = new FileSystemXmlApplicationContext(
                                               "Src/applicationContext.xml ");//src下面建立xml的時候用該方法
          然后DriveCar dc=(DriveCar)ctx.getBean("DriveCar");就可以使用了……
          注意上面兩種加載是的路徑。
          然后在把他們轉換成BeanFactory就可以了。需要用到那個bean就用getBean(“”)取得,可以根據id或name都可以。
          除此之外還有兩種加載的方法:
          第三種方法:
          ClassPathResource resource =
          new ClassPathResource("applicationContext.xml");
          BeanFactory factory = new XmlBeanFactory(resource);
          第四種方法:
          Resource resource =
          new FileSystemResource("Src/applicationContext.xml");
          BeanFactory factory = new XmlBeanFactory(resource);
          同樣要注意上面的路徑的不同。其實classpath相對應的路徑就是Src目錄下,而fileSystem相對的是工程目錄。所以它們路徑是有區別的,加載時也要細心,不然就會報java.io.FileNotFoundException(系統找不到指定的文件)的異常了。


          第三四種方法沒有測試。

          剛又查了spring的ContextLoaderListener,可以再web.xml中<web-app></web-app>之間添加
               <context-param>
                  <param-name>contextConfigLocation</param-name>
                  <param-value>
                      /WEB-INF/classes/applicationContext*.xml
                  </param-value>
               </context-param>
          </web-app>
          就可以只在src目錄下建立applicationContext.xml了,呵呵
          posted @ 2009-06-24 10:45 sillyha| 編輯 收藏
          主站蜘蛛池模板: 祁连县| 彝良县| 柯坪县| 景洪市| 米易县| 桐乡市| 治多县| 南丰县| 辰溪县| 永顺县| 察雅县| 资阳市| 佛冈县| 台湾省| 四平市| 武功县| 志丹县| 慈利县| 江陵县| 漠河县| 镇赉县| 东明县| 土默特右旗| 广平县| 惠来县| 左云县| 留坝县| 东台市| 高雄县| 德保县| 辽宁省| 屯留县| 泰顺县| 台山市| 洛南县| 山东| 光泽县| 长宁县| 万山特区| 沙河市| 突泉县|