熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

一些錯誤地解決方法

2022-06-13   來源: Java核心技術 

如果使用Ant和Junit是被報找不到test檢查一下是否誤用了private
出錯信息
    <failure message=No tests found in testAllTest type=junitframeworkAssertionFailedError>junitframeworkAssertionFailedError: No tests found in testAllTest
該錯誤有個很特別的特點當你不通過ant來運行測試而是通過AllTest類來運行的話可以正常運行小心哦

如果遇到報表名無效且jvm報嚴重錯誤看看是不是用了數據庫的保留關鍵字來做表名了如User

使用ant時必須小心ant的classpath它用的不是IDE的classpath小心!

小心下邊的異常
exception setting property value with CGLIB (set hibernatecglibuse_reflection_optimizer=false for more info) setter of xpbeanUsers? type=netsfhibernatePropertyAccessException>javalangClassCastException at xpbeanUsersMetaClasssetPropertyValues(<generated>) at netsfhibernatepersisterAbstractEntityPersistersetPropertyValues
上次出現該錯錯誤的原因是:
源文件裡我的class類型為一個類Contact contact
而跑到mapping裡卻成了Set呵呵厲害

突然間冒出大量的NullPointException
重新build一下看看先

=Flush during cascade is dangerous this might occur if an object was deleted and then resaved by cascade

Tapestry的出錯信息
Class combookshopHello does not implement the IPage interface
location: context:/WEBINF/Homepage line
原因與顯示有關的哪個java類沒有從IPage家族繼承

使用ant時給出的路徑好象不允許出現空格

由於使用ant時用junit做測試的話classpath中出現jeejar的話問題多多例如xml格式的log文件生成不了莫名其妙的NullPointException等所以我設置了兩個包個包含jeejar為編譯用一個沒有為junit用

進行單元測試時在查詢返回後應馬上assertNotNull()這樣可以更快速的定位NullPointException

要使用ResourceBundle的話要千萬小心必須用日志記錄下它的狀態還有該屬性文件應該放在classes下面

當要顯示任何頁面時都被提示無效那麼應該檢查一下lib目錄了還有一些很奇怪的異常例如你明明可以找到一個類但是服務器卻提示ClassNotDefException那麼估計是缺少了該類所必須的包了或者多了不兼容的包 xdoclet系列包不被struts的lib目錄所兼容

編寫clone時從Java編程思想(nd)上學到的()
引數傳遞過程中會自動產生別名(alias)
沒有局域對象(local objects)只有局域性的(local)references
reference受范圍(scope)的限制對象則否
對象的壽命從來不是Java的討論議題(因為有垃圾回收機制)

try catch finally的域居然是分離的

jsp亂碼的其中一個原因charset=gb 等號=的兩邊不允許有空格

我的基於Displaytag的簡單報表解決方案

下載displaytagjar和displaytagtld
displaytagjar放在lib目錄而displaytagtld放在WEBINF目錄在webxml中為displaytagtld聲明一下
  <taglib>
    <tagliburi>;/tagliburi>
    <tagliblocation>/WEBINF/displaytagtld</tagliblocation>
  </taglib>
在jsp裡使用前加上
  <%@ taglib uri= prefix=display %>
       
注意該軟件有個bug他要用的一個包commonlangjar版本必須在以上
如果碰到下面異常則應堅持一下是否該包的版本問題
javalangNoSuchMethodError: monslangStringUtilscapitalize(Ljava/lang/String;)Ljava/lang/String;
然後就可放心使用了
<display:column property = xxx/>其中xxx為對象中的帶有getter的變量>
定義表格的樣子用css定義
s THEAD TR {
 BACKGROUNDCOLOR: #c
}
s TReven {
 BACKGROUNDCOLOR: #def
}
在使用分頁時可能會出現這種情況點擊其他頁時彈出下載窗口讓你下載當前jsp頁面這是因為你在當前頁面讀取了數據的緣故解決辦法為在action裡讀取數據而不是在jsp裡可以參考
?dp=

使用displaytag時在一列中放入多個元素
必須在display:table中定義一個id
<display:table name = allBooks class = its pagesize = id = item>
  <display:column title = 操作>
    <a href = /Bookshop/admin/bookManagementdo?action=view&id=<%=((Book)item)getId()%> target = _blank >查看</a>
    <a href = /Bookshop/admin/bookManagementdo?action=edit&id=<%=((Book)item)getId()%>>編輯</a>
    <a href = /Bookshop/admin/bookManagementdo?action=delete&id=<%=((Book)item)getId()%>>刪除</a>
  </display:column>
要在displaytag中使用鏈接必須具備paramId否則不顯示為鏈接
 <display:column property = productname href = viewDetailVjsp title = 書名 paramId=item paramProperty=productid/>
可以這樣使用display
  <display:column property = productid title = ID/>
其中product為對象

<bean:write name = xxxx property = xxx/> 可以直接取到sessiongetAttribute()取到的東西

實驗strutsupload例子時要注意的地方
   If you would rather write this file to another file please check here:
 這一行要打鉤
   If you checked the box to write to a file please specify the file path here:
在這裡要重命名如c:\bjpg
上傳成功的話會出現提示 The file has been written to c:\bjpg

Hibernate的like可以這麼用
      Query query = sessioncreateQuery(from srcpersistentBook as book where upper(bookname) like :name );
      querysetString(name %);
      result = querylist();

Hibernate出現 duplicate import : className
異常也可能是因為忘了為持久類在configuration中addClass了
     
<logic:iterate id = author name = authors>
name所引用的是session裡的attribute

如果發現要出現詢問下載的情況有可能是因為要跳轉的頁面出現了問題試試在要跳轉到的頁刪掉
<%@ page contentType=text/html; charset=gb%>

如果JSP頁面跳轉時出現下邊的錯誤信息
The request sent by the client was syntactically incorrect (Invalid path /web/shoppingCart was requested)
原因是strutsconfig的action = x 寫成了 action = xdo

在struts中strutconfigxml中forward時使用redirect = true可以將do重定向為jsp

以後在判斷相等性之前先用logger把兩個值顯示出來

從session裡getAttribute後修改並不需要重新setAttribute一次

在hibernate中使用subclass是一棵繼承樹共用一個表僅生成個mapping
每個類中必須有discrimatorvalue在最上層的類中必須聲明
@hibernatediscriminator column = class
不可以將子類添加到configuration裡去(即不可addClass(子類))
使用Xdoclet的建立subclass的例子(該類是父類)
/**
 * @hibernateclass discriminatorvalue = customer
 * @hibernatediscriminator column = class
 */

而使用joinedsubclass則是一類一表也不許將子類添加進configuration裡去
/**
 * @hibernatejoinedsubclass
 * @hibernatejoinedsubclasskey
 * column=customer_id
 */
如果發現生成的mapping文件中joinedsubclass的key column為空那麼可能是@hibernatejoinedsubclasskey這句沒有寫對
用joinedsubclass生成的表仔細看Member extends Customer
create table Customer (
   id VARCHAR() not null
   name VARCHAR()
   description VARCHAR()
   primary key (id)
)
create table Member (
   customer_id VARCHAR() not null
   password VARCHAR()
   primary key (customer_id)
)

在junit中盡量使用assertEquals代替assertTrue;

Hibernate
如果Child extends Parent
那麼from Parent as parent 也將會將Child選出來而from Child as child 則不會選出Parent

Hibernate
使用hibernate的onetoone時應該兩方向都set否則會報save NullPointException
parentsetChild(child);
childsetParent(parent);

Hibernate
遇到下邊的異常估計是與因為外鍵出現了問題

javalangNullPointerException
 at netsfhibernatepersisterAbstractEntityPersistergetPropertyValue(AbstractEntityPersisterjava:)
 at netsfhibernateidForeignGeneratorgenerate(ForeignGeneratorjava:)
如:
* @hibernateid generatorclass = foreign
* @hibernategeneratorparam name = property value = customer
* @hibernateonetoone name = custmoer class = srcpersistentCustomer
value的值和onetoone 中name的值不符則會出現上邊的異常如果不顯示指定name則默認取成員變量名

Customer a
則name = a 需要小心的是不是類名所以以後最好顯示指定名字為好

出現異常
Exceptionobject references an unsaved transient instance save the transient instance before flushing: srcpersistentProduct
原因沒有為某對象進行set設置 如上邊的這個就是某對象沒有調用setProduct


xxx action = /a 不用do和根目錄名
<a href = bdo 需要do和根目錄名


Caused by: javasqlSQLException: ORA: 違反完整約束條件 (BOOKSHOPFKAAEE
CCAB) 未找到父項關鍵字
如果你覺得該做的e是出現這個問題那麼檢查一下是否將類的繼承關系在hibernate的mapping中反映了出來joinedsubclass或subclass
例如a extends b
如果持久類c 需要Set的是持久類a那麼你把b傳入而b又沒有在mapping中將父子關系反映出來的話就會出現該異常

使用DynaActionForm需要注意的問題
在strutsconfig聲明
<formbean name=memberloginForm dynamic =true type=orgapachestrutsactionDynaActionForm>
  <formproperty name = name type = javalangString/>
  <formproperty name = password type = javalangString/>
</formbean>
在Action裡將form強制轉化成DynaActionForm然後get(屬性名)就可以了

那位大俠能給出一個用hibernate進行分頁得實際例子學習中!
?t=
Query q = sfind();
qsetFirstResult();   //  從第條記錄開始
qsetMaxResults();  //  取出


struts的validate最簡單實現
首先准備好錯誤提示信息
xxxproperties 裡
errorsrequired={} is required(默認已有)
Form必須從ValidatorForm繼承
不可以重載ValidatorForm的validate函數
在validatexml中為你想驗證的表單進行驗證設計例如
<form name=logonForm>
    <field property=userName depends=required>
 <arg key=promptuserName/>
 (該參數將在顯示錯誤信息是從xxxproperties讀取promptuserName填入{}方括號裡取代如果是arg將將填入{}位置以此類推
    </field>
</form>
不需要在action裡做任何處理只管forward就行了作為forward的目標頁不需要任何有關用於處理出錯信息的處理

服務器報
The requested resource (/xxxx/) is not available的很奇怪的一個的可能原因
在webxml中定義的tld沒有找到
或者是lib目錄下的包太多出現了問題

  <taglib>
    <tagliburi>/spring</tagliburi>
    <tagliblocation>/WEBINF/springtld</tagliblocation>
  </taglib>
如WEBINF目錄下不存在springtld的話就會報上邊的錯誤


spring的xxxservletxml的使用SimpleFormController系列的類問題
  <bean id = priceIncreaseForm class=PriceIncreaseFormController>
    <property name=sessionForm><value>true</value></property>
    <property name=beanName><value>priceIncrease</value></property>
    <property name=commandClass><value>PriceIncrease</value></property>
    <property name=formView><value>priceIncrease</value></property> 
    <property name=successView><value>hello</value></property>
    <property name=productManager>
      <ref bean=prodMan/>
    </property>
  </bean>
這裡要注意幾個問題
()上邊的PriceIncrease是了類名必須在classes裡存在該類否則報
PropertyVetoExceptionsException: errors: ErrorCodedPropertyVetoException: message=[Failed to convert property value of type [javalangString] to required type [javalangClass] for property named commandClass; nested exception is:
 javalangIllegalArgumentException: Invalid class name [PriceIncrease]: PriceIncrease]; errorCode=[typeMismatch]
javalangIllegalArgumentException: Invalid class name [PriceIncrease]: PriceIncrease
()<property name=formView><value>priceIncrease</value></property>
這一行必不可少priceIncrease是頁面的名字他將會是prefix + priceIncrease + suffix
如果缺少該行則報
javaxservletServletException: Error in ModelAndView object or View resolution encountered by servlet with name pocketSpring: View to render cannot be null with ModelAndView [ModelAndView: materialized View is [null]; Model=[{priceIncrease=PriceIncrease@e orgspringframeworkvalidationBindExceptionpriceIncrease=orgspringframeworkvalidationBindException: BindException: errors}]]

使用Errors的rejectValue相關問題
rejectValue(javalangString field javalangString errorCode javalangObject[] errorArgs javalangString defaultMessage)
Reject the given field of the current object using the given error description
當前對象指的是xxxservletxml中與validator類有聯系的哪個對象
         
第一個是當前對象的屬性名必須存在
第二個是將要從屬性文件中讀取的消息
第三個是傳遞給所讀取的消息的參數
errortoolow=You have to specify a percentage higher than {}!
第四個是當從屬性文件中讀取消息不成功時所reject的值

以後從request中讀取parameter可以借用spring的RequestUtils包裡的
getStringParameter
public static javalangString getStringParameter(javaxservlethttpHttpServletRequest request
                                           &bsp;      javalangString name
                                                  javalangString defaultVal)
Get a string parameter with a fallback value Never throws an exception Can pass a distinguished value to default to enable checks of whether it was supplied
不會拋異常
Hibernate的問題rc的問題
INFO: cache provider: netsfehcachehibernateProvider
netsfhibernateHibernateException: could not instantiate CacheProvider:
解決辦法rc比以前的版本多需要一個包
ehcachejar

static的問題
static函數只可以訪問static成員變量
而static變量可以被任何成員函數訪問


javalangNoClassDefFoundError: javax/transaction/Synchronization];
需要添加JTAjar
From:http://tw.wingwit.com/Article/program/Java/hx/201311/11150.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.