??xml version="1.0" encoding="utf-8" standalone="yes"?> DEMOQ?/p>
准备工作Q?/p>
一、程序准备: 1?创徏复合javabean QMainVO.javaQ(getter和setterҎ自写Q?/p>
package com.test; import java.util.List; public class MainVO { private String title; private String time; private List<SubVO> subList; } 2?创徏子表javabeanQSubVO.javaQgetter和setterҎ自写Q?/p>
package com.test; public class SubVO { private String name; 3?创徏JRAbstractBeanDataSourceProviderQTestSubReport.java package com.test; public class TestSubReport extends JRAbstractBeanDataSourceProvider { public TestSubReport() { super(MainVO.class); } public JRDataSource create(JasperReport arg0) throws JRException { /** *试数据Q在使用中,不需要承JRAbstractBeanDataSourceProviderQ?/p>
*只需要把集合cd装到JRBeanCollectionDataSource中就可以?/p>
**/ List<MainVO> mainList = new ArrayList<MainVO>(); List<SubVO> list = new ArrayList<SubVO>(); MainVO vo; /**试数据自写*/ …… return new JRBeanCollectionDataSource(mainList); } 4?创徏外部试c:TestMain.java: public static void main(String[] args) { String filename = "bin/SubReport.jasper"; String outFileName = "bin/Out.html"; /**试数据mainList自写*/ try { JasperPrint print = JasperFillManager.fillReport(filename, new HashMap(),new JRBeanCollectionDataSource(mainList)); JRExporter exporter = new JRHtmlExporter(); exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outFileName); exporter.setParameter(JRExporterParameter.JASPER_PRINT, print); exporter.exportReport(); } catch (JRException e) { e.printStackTrace(); } } 5?创徏ScriptletQreportScriptlet.java 注意Q?如果你从父报表传l子报表的数据源是个集合cdQ且不需要Q何的数据处理Q这步可以省略,但需要注意我在第二部分的W?步骤的提C?/p>
该类是用来进行类型{换的Q要惌jasperreports识别数据源就必须把集合类装到JRDataSource中。由于父报表把数据源传递给子报表是在afterDetailEval()Ҏ之后Q因此只需要重写该ҎQ?/p>
package com.test; public class reportScriptlet extends JRAbstractScriptlet { /**其余Ҏ省略*/ @Override public void afterDetailEval() throws JRScriptletException { System.out.println("afterDetailEval..."); List subList = (List)getFieldValue("subList"); JRDataSource jr = new JRBeanCollectionDataSource(subList); /** *该值是在父报表中定义的一个变量Variables, *cd为net.sf.jasperreports.engine.JRDataSource *Q需要手动填写Class TypeQ?/p>
**/ setVariableValue("other", jr); } } 该Scriptlet供父报表使用 二、报表准?/p>
׃ireport的汉化很不完_q里׃用英文的界面做demo(有兴汉化的Q可以编辑位于ireport.jar包的it.businesslogic.ireport.locale下的Ireport_zh_CN.properties)?/p>
1?创徏父报表:SubReport.jrxmlQ通过菜单栏:Data -->Connections /Datasources -->new选择JRDataSourceProvider定义如图Q?/p>
Test 成功后(前提是先在ireport的classpath中设|工E编译文件夹路径Qsave?/p>
2?讄另一个数据源Q给子报表用Q在q里我选择了用Custom JRDataSource 使用Custom JRDataSourceq里我必d目中编写一个额外的cȝ于测试: package com.test; public class CRDSFactory{ public static JRDataSource createDatasource(){ List<SubVO> list = new ArrayList<SubVO> (); /**试数据自写*/ …… return new JRBeanCollectionDataSource(list); } } Test 成功?save?/p>
3?注册字段Fileld 利用菜单中的Data --> Report Query -->DataSource Provider 获取字段Q然后全选获取到的字D늂ȝ认注册?/p>
4?d变量Variables 该变量用途是作ؓ父报表传递给子报表的数据源,所以类型ؓJRDataSource 如图Q?/p>
5?创徏子报表: SubReport_subreport0.jrxml,(名字ql生? 点击工具栏中?#8221;SubReport”图标Qƈ定好子报表的位|,利用pȝ的wizard一步一步设|,注意在第2步设|?#8221;Connection/Datasource ”时最好选择”no connection or datasource”Q因为我们的datasource是父报表中的一个变? 6?ireport的Files视窗的其他报表文件关闭(大概需要这P前几ơ因为没关闭Z炚w题,不清楚什么原因)如果看不到Files视窗Q可以通过菜单的View --> Docking panes -->Files 回显。单独选择刚才子报表而设|的数据?#8220;custds”Q通过刚才的Report Query -->JavaBean Data Sourced子报表相关的javabean属性。选择后点ok其注册到Fields中。如图: 7?打开父报表,在设计窗口的子报表上右键Q选择Properties -->SubReport,讄q报表传递给子报表的数据源: 提示Q如果你略过了第一部分的第5步,q里?#8220; $V{other} ”要改?#8220; new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($V{other})” 8?依次~译Q用动态连接)子报表、父报表(注意数据源的对应关系)Q如果能通过父报表看到子报表的内容被填充Q则说明试成功了!如果不成功,查刚才设|是否有遗漏的地方,最好重新创建子报表Q有时ƈ不是我们讄问题Qireport目前q不是很E_Q在~译和保存数据时很容易出错,有时q子报表都不?_-!! 9? 效果图:Q没有修饎ͼ实很难?#8230;Q?/p>
注意事项Q?/p>
? 熟悉jaspereports的以手动~辑代码ZQ?ireportQ用ireport时有时也必须手动~辑jasperreportQ特别是在编译出错的时候?/p>
? 不能把父报表的一个变量同时传递给多个子报表,不然可能只能昄一个或什么都不显C,如果需要这么做Q请定义多个变量?/p>
? 子报表的d不要用旧报表Q即使你的旧报表是刚才用的子报表?/p>
? 如果子报表还要嵌套子报表的话Q可以通过为子报表~写一个Scriptlet实现?/p>
不过要清楚的是子报表有可能不执行afterDetailEval()和beforeDetailEval()Q比如用jdbcq?接,q也许跟子报表的数据源选择有关Q,最好先试Q具体原因希望达人告知! ? 在用ireportq行开发时Q当修改了某个类Ӟ需要重启ireport才能看到修改的效果,即是用ireport的Scriptlet~辑器也一栗?/p>
? 不是高版本好用,主要是缺用文档,qjavadoc 严重: IOException while loading persisted sessions: java.io.EOFException java.io.EOFException at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2281) at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2750) at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780) at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280) at org.apache.catalina.util.CustomObjectInputStream.<init>(CustomObjectInputStream.java:58) at org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:362) at org.apache.catalina.session.StandardManager.load(StandardManager.java:321) at org.apache.catalina.session.StandardManager.start(StandardManager.java:637) at org.apache.catalina.core.ContainerBase.setManager(ContainerBase.java:438) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4271) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525) at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:926) at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:889) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) at org.apache.catalina.core.StandardHost.start(StandardHost.java:719) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) at org.apache.catalina.core.StandardService.start(StandardService.java:516) at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) at org.apache.catalina.startup.Catalina.start(Catalina.java:578) 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:597) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413) 2008-10-21 15:18:18 org.apache.catalina.session.StandardManager start 严重: Exception loading sessions from persistent storage java.io.EOFException at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2281) at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2750) at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780) at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280) at org.apache.catalina.util.CustomObjectInputStream.<init>(CustomObjectInputStream.java:58) at org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:362) at org.apache.catalina.session.StandardManager.load(StandardManager.java:321) at org.apache.catalina.session.StandardManager.start(StandardManager.java:637) at org.apache.catalina.core.ContainerBase.setManager(ContainerBase.java:438) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4271) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525) at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:926) at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:889) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) at org.apache.catalina.core.StandardHost.start(StandardHost.java:719) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) at org.apache.catalina.core.StandardService.start(StandardService.java:516) at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) at org.apache.catalina.startup.Catalina.start(Catalina.java:578) 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:597) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413) ================================================================================== 出现原因Qtomcat对保存硬盘的sessiondp| 解决ҎQ打开TOMCAT的安装目录,在WORK文gҎ到当前项目文件夹Q把里面的session.ser删除卛_?/p>
]]>
select p.spid,a.serial#, c.object_name,b.session_id,b.oracle_username,b.os_user_name from v$process p,v$session a, v$locked_object b,all_objects c where p.addr=a.paddr and a.process=b.process and c.object_id=b.object_id
查看q接的进E?
SELECT sid, serial#, username, osuser FROM v$session;
杀掉进E?
alter system kill session 'sid,serial#';
]]>
]]>
]]>
]]>
]]>
下載後解壓縮到C槽,更名資料处ant
接著a定以下環境變數Q?br />
ANT_HOME=c:\ant
JAVA_HOME=c:\jdk-1.5.0.05
PATH=%PATH%;%ANT_HOME%\bin
開始 -> 控制?-> pȝ -> 進階 -> 環境變數 ->
1. 新增 -> 變數名稱: ANT_HOME 變數? c:\ant -> 定
2. 扑ֈ變數Path -> R輯 -> 在變數值最後面加上 ;%ANT_HOME%\bin (注意分號)
定離開後重新啟動電腦?br />
重新啟動後,
開始 -> 埯 -> cmd -> 在命令提C字元下輸入 ant
若出?br />
Buildfile: build.xml does not exist!
Build failed
表示路徑已完成設定?br />
]]>
“有hZ实验老鼠生气Q就掐它ַ让它生气Q制造一个生气的模型Q但那与人生气不可能一P人就是hQ是很难模拟的?#8221;樊正伦指出,中医说喜、怒、忧、思、悲、恐、惊是作Z个正思h必须有的情AQ而这些情l跟你的五脏密切相关。所以情l的好坏、变化直接媄响着你的生命zd?/font>
怒与肝相兟뀂生气的时候肝气特别旺Q一哭,肺气上来了,肺属金,肝属木,金克木,肺气一通肝气就调达了,如果气一半,肝气没下来,回头q得接着吉|不说Q还Ҏ得病?#8220;所以,吉|时不能气半截Q要吵透?#8221;樊正伦说?/font>
五脏怺制约Q如果可以很好地调整情AQ就可以生很多病。樊正u_临床中发玎ͼ女h三四十岁Ӟ甲状腺、卵巢、^腺都Ҏ出现一pd病变。其原因?5岁到42岁这个阶D,x脉衰Q自w运化的能力׃。而且q个q龄Q上有老,下有,在家里和单位都是梁柱,郁闷得不到疏散,q类疄的发病率非帔R?/font>
他徏议,q个q龄D늚x要自觉地调整自q状态,调整自己的情l,在特别抑郁的时候大哭一场,或者大骂一,能自如地嬉笑怒骂Q疾病就会少很多?/font>
h以xZQ表现得不像女h那么剧烈Q不爱哭Q什么事都憋着扛着Q认h是男子汉。这也是不对的,男h与女ZP都需要宣泄,以免肝气郁结?/font>
org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.IllegalArgumentException: Argument cannot be null)
at org.eclipse.swt.SWT.error(SWT.java:3563)
at org.eclipse.swt.SWT.error(SWT.java:3481)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:126)
中略
Caused by: java.lang.IllegalArgumentException: Argument cannot be null
at org.eclipse.swt.SWT.error(SWT.java:3547)
at org.eclipse.swt.SWT.error(SWT.java:3481)
at org.eclipse.swt.SWT.error(SWT.java:3452)
?/p>
解决Ҏ
在某英文|站上找C下答案,试了Q没好用。你们可以试下OK不?
a) leave myeclipse
b) point explorer to the .metadata folder
c) right mouse button select "search" giving criteria 'org.eclipse.update*' (without quotes)
d) deleting all the files/folders found
e) restart myeclipse
通过上面的联惛_其它UpdateStamp的文Ӟ到MyEclipse的安装目录,之下?#8220;eclipseconfigurationorg.eclipse.update”目录Q?
发现有一个,last.config.stamp?
a) leave myeclipse
b) delete last.config.stamp
c) restart myeclipse
之后没有同LH口弹出来?
但是Q如果在某项目上右键打开目的属性窗口,点击“Myeclipse”的Update按钮Q又会弹出同LH口?
q样的话Q只要再重复一下上q操作就OK?