出現此Bug為在persistence中有已有一個Primary key相同的物件存在
若該Primary key為自動累加的流水號
需在JPA特別設定
@GeneratedValue(strategy=GenerationType.IDENTITY)
如下:
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "id",length = 15)
private Integer id;
2015年2月24日 星期二
[MySQL] MySQL保留字 (Reserved Words)
2015年2月9日 星期一
[Bug] java.lang.ClassNotFoundException: org.apache.tiles.web.startup.TilesListener
今天試著不要參考前輩建的環境架構
自己用maven + struts2 + tiles 架出基礎架構
tiles是參考tutorialspoint
結果在裝tiles時遇到了這個Bug
二月 09, 2015 4:31:22 下午 org.apache.catalina.core.StandardContext listenerStart
嚴重: Error configuring application listener of class org.apache.struts2.tiles.StrutsTilesListener
java.lang.NoClassDefFoundError: org/apache/tiles/web/startup/TilesListener
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2957)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1210)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1690)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:529)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:511)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:139)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4888)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5467)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: org.apache.tiles.web.startup.TilesListener
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
... 19 more
原因在於我們在web.xml加了listener
<listener>
org.apache.struts2.tiles.StrutsTilesListener
</listener>
呼叫的是struts2-tiles-plugin這個jar檔的StrutsTilesListener(見圖左下)
但 StrutsTilesListener又extends TilesListener(見圖右)
TilesListener應該要在tiles-core這個jar檔中(文中使用到3.0.5版),但找不到了(見圖左上)

因此
1. struts2-tiles-plugin裡沒有StrutsTilesListener的話請修改到有StrutsTilesListener的版本
應該是2.2.1以上(無求證)
我目前使用過2.3.x 都有
2. tiles-core裡沒有TilesListener請修改tiles-core的版本聽說是2.0.x可使用(無求證)
我目前使用2.0.6
3. 若將tiles-core改成2.0.6後還有其他錯誤,請再檢查tiles-api及tiles-jsp,最好都改成同一版本,因為tiles-core會呼叫tiles-api,轉去jsp頁面時會呼叫tiles-js,它們同一國的!
結論:
採用
struts2-tiles-plugin.2.2.1.jar ↑
tiles-api.2.0.6.jar
tiles-jsp-2.0.6.jar
tiles-core-2.0.6.jar
得出這個結論參考了這裡
自己用maven + struts2 + tiles 架出基礎架構
tiles是參考tutorialspoint
結果在裝tiles時遇到了這個Bug
二月 09, 2015 4:31:22 下午 org.apache.catalina.core.StandardContext listenerStart
嚴重: Error configuring application listener of class org.apache.struts2.tiles.StrutsTilesListener
java.lang.NoClassDefFoundError: org/apache/tiles/web/startup/TilesListener
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2957)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1210)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1690)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:529)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:511)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:139)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4888)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5467)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: org.apache.tiles.web.startup.TilesListener
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
... 19 more
原因在於我們在web.xml加了listener
<listener>
org.apache.struts2.tiles.StrutsTilesListener
</listener>
呼叫的是struts2-tiles-plugin這個jar檔的StrutsTilesListener(見圖左下)
但 StrutsTilesListener又extends TilesListener(見圖右)
TilesListener應該要在tiles-core這個jar檔中(文中使用到3.0.5版),但找不到了(見圖左上)
因此
1. struts2-tiles-plugin裡沒有StrutsTilesListener的話請修改到有StrutsTilesListener的版本
應該是2.2.1以上(無求證)
我目前使用過2.3.x 都有
2. tiles-core裡沒有TilesListener請修改tiles-core的版本聽說是2.0.x可使用(無求證)
我目前使用2.0.6
3. 若將tiles-core改成2.0.6後還有其他錯誤,請再檢查tiles-api及tiles-jsp,最好都改成同一版本,因為tiles-core會呼叫tiles-api,轉去jsp頁面時會呼叫tiles-js,它們同一國的!
結論:
採用
struts2-tiles-plugin.2.2.1.jar ↑
tiles-api.2.0.6.jar
tiles-jsp-2.0.6.jar
tiles-core-2.0.6.jar
得出這個結論參考了這裡
2015年2月4日 星期三
[C#] reportViewer動態切換rdlc
還是一篇鳥蛋教學
請小心服用
若是要按某個按鈕後將reportViewer換成另一個rdlc(連dbDataSet一起換掉)
則在Click方法中寫入
比較重要的是要
1.reset reportViewer
2.塞新的rdlc路徑給reportViewer
若你的DataSource是BeanList
可以參考這篇
請小心服用
若是要按某個按鈕後將reportViewer換成另一個rdlc(連dbDataSet一起換掉)
則在Click方法中寫入
// 這裡Reset reportViewer除了斷開(?)它和rdlc檔的連結,還有資料來源(dbDataSet/DataSources)的連結 reportViewer1.Reset(); // 如果是使用TableAdapters則在這裡定義 dbDataSetTableAdapters.userinfoTableAdapter ds = new dbDataSetTableAdapters.userinfoTableAdapter(); // 取得TableAdapters資料並塞成DataTable(有助於你要把它塞成資料集時系統好辦視型態) DataTable dt = ds.GetData(); // 將要指定給reportViewer的rdlc路徑給它 // 使用ReportEmbeddedResource後rdlc名稱寫成專案名稱.XXX.rdlc即可不用寫完整路徑 reportViewer1.LocalReport.ReportEmbeddedResource = "Demo.Report2.rdlc"; // 指定資料集,名稱需與rdlc中的相同 reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", dt)); reportViewer1.RefreshReport();
比較重要的是要
1.reset reportViewer
2.塞新的rdlc路徑給reportViewer
3.因為reset後DataSources也會清空也要塞新的DataSource(就不一定是TableAdapter
4. Refresh reportViewer若你的DataSource是BeanList
可以參考這篇
[Bug] maven...not supported in -source 1.x
如果在對maven做install時,出現類似
maven strings in switch are not supported in -source 1.5
以此類推
maven balabalabalabalabala not supported in -source 1.x
但電腦環境變數設定的jdk是1.7無誤
1.檢查是否手殘以至於maven找不到JAVA_HOME

若結果也是1.7無誤
2.檢查pom.xml檔
首先檢看build tag中是否有以下設定
若無則加上去
build tag是在project tag中
<properties>tag中加入
maven strings in switch are not supported in -source 1.5
以此類推
maven balabalabalabalabala not supported in -source 1.x
但電腦環境變數設定的jdk是1.7無誤
1.檢查是否手殘以至於maven找不到JAVA_HOME
在令命提示字元裡下mvn -version觀看maven的JAVA_HOME抓到的值
若結果也是1.7無誤
2.檢查pom.xml檔
首先檢看build tag中是否有以下設定
若無則加上去
build tag是在project tag中
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
另一種方法為<properties>tag中加入
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
訂閱:
文章 (Atom)