В этом примере я покажу, как интегрировать DynamicReport и JasperReports с сервлетом и CDI.
Инструменты:
- TIBCO Jaspersoft Studio-6.0.4. Финал.
- Eclipse Luna Service Release 2 (4.4.2).
- Сервер приложений WildFly 8.x.
Это скриншот из иерархии проектов в Eclipse.
- Файл pom.xml содержит необходимые зависимости для сервлетов + JSF + CDI + DynamicReports.
01020304050607080910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
<
project
xmlns
=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
<
modelVersion
>4.0.0</
modelVersion
>
<
groupId
>com.ithinkisink</
groupId
>
<
artifactId
>DynamicReportsWithJSFServletsAndCDI</
artifactId
>
<
packaging
>war</
packaging
>
<
version
>0.0.1-SNAPSHOT</
version
>
<
name
>DynamicReportsWithJSFServletsAndCDI Maven Webapp</
name
>
<
dependencies
>
<
dependency
>
<
groupId
>javax.inject</
groupId
>
<
artifactId
>javax.inject</
artifactId
>
<
version
>1</
version
>
<
scope
>provided</
scope
>
</
dependency
>
<
dependency
>
<
groupId
>javax.faces</
groupId
>
<
artifactId
>jsf-api</
artifactId
>
<
version
>2.1</
version
>
<
scope
>provided</
scope
>
</
dependency
>
<
dependency
>
<
groupId
>javax.servlet</
groupId
>
<
artifactId
>javax.servlet-api</
artifactId
>
<
version
>3.1.0</
version
>
<
scope
>provided</
scope
>
</
dependency
>
<
dependency
>
<
groupId
>javax.enterprise</
groupId
>
<
artifactId
>cdi-api</
artifactId
>
<
version
>1.0</
version
>
<
scope
>provided</
scope
>
</
dependency
>
<
dependency
>
<
groupId
>net.sourceforge.dynamicreports</
groupId
>
<
artifactId
>dynamicreports-core</
artifactId
>
<
version
>4.0.0</
version
>
</
dependency
>
</
dependencies
>
<
build
>
<
finalName
>DynamicReportsWithJSFServletsAndCDI</
finalName
>
<
plugins
>
<
plugin
>
<
groupId
>org.apache.maven.plugins</
groupId
>
<
artifactId
>maven-compiler-plugin</
artifactId
>
<
version
>3.1</
version
>
<
configuration
>
<
source
>1.7</
source
>
<
target
>1.7</
target
>
</
configuration
>
</
plugin
>
</
plugins
>
</
build
>
</
project
>
- Создание простого шаблона JRXML с использованием TIBCO Jaspersoft Studio, содержащего изображение, которое будет динамически передавать его путь в качестве параметра из DynamicReportsManagedBean в DynamicReports позже.
001002003004005006007008009010011012013014015016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<!-- Created with Jaspersoft Studio version 6.0.4.final using JasperReports Library version 6.0.4 -->
<!-- 2015-12-04T17:15:43 -->
<
jasperReport
xmlns
=
"http://jasperreports.sourceforge.net/jasperreports"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation
=
"http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name
=
"Invoice"
pageWidth
=
"595"
pageHeight
=
"842"
columnWidth
=
"535"
leftMargin
=
"20"
rightMargin
=
"20"
topMargin
=
"20"
bottomMargin
=
"20"
uuid
=
"4eedbb89-b4f6-4469-9ab6-f642a1688cf7"
>
<
property
name
=
"com.jaspersoft.studio.data.defaultdataadapter"
value
=
"One Empty Record"
/>
<
style
name
=
"Title"
forecolor
=
"#FFFFFF"
fontName
=
"Times New Roman"
fontSize
=
"50"
isBold
=
"false"
pdfFontName
=
"Times-Bold"
/>
<
style
name
=
"SubTitle"
forecolor
=
"#CCCCCC"
fontName
=
"Times New Roman"
fontSize
=
"18"
isBold
=
"false"
pdfFontName
=
"Times-Roman"
/>
<
style
name
=
"Column header"
forecolor
=
"#666666"
fontName
=
"Times New Roman"
fontSize
=
"14"
isBold
=
"true"
/>
<
style
name
=
"Detail"
mode
=
"Transparent"
fontName
=
"Times New Roman"
/>
<
style
name
=
"Row"
mode
=
"Transparent"
fontName
=
"Times New Roman"
pdfFontName
=
"Times-Roman"
>
<
conditionalStyle
>
<
conditionExpression
>
<![CDATA[$V{REPORT_COUNT}%2 == 0]]>
</
conditionExpression
>
<
style
mode
=
"Opaque"
backcolor
=
"#EEEFF0"
/>
</
conditionalStyle
>
</
style
>
<
style
name
=
"Table"
>
<
box
>
<
pen
lineWidth
=
"1.0"
lineColor
=
"#000000"
/>
<
topPen
lineWidth
=
"1.0"
lineColor
=
"#000000"
/>
<
leftPen
lineWidth
=
"1.0"
lineColor
=
"#000000"
/>
<
bottomPen
lineWidth
=
"1.0"
lineColor
=
"#000000"
/>
<
rightPen
lineWidth
=
"1.0"
lineColor
=
"#000000"
/>
</
box
>
</
style
>
<
style
name
=
"Table_TH"
mode
=
"Opaque"
backcolor
=
"#FFFFFF"
>
<
box
>
<
pen
lineWidth
=
"0.5"
lineColor
=
"#000000"
/>
<
topPen
lineWidth
=
"0.5"
lineColor
=
"#000000"
/>
<
leftPen
lineWidth
=
"0.5"
lineColor
=
"#000000"
/>
<
bottomPen
lineWidth
=
"0.5"
lineColor
=
"#000000"
/>
<
rightPen
lineWidth
=
"0.5"
lineColor
=
"#000000"
/>
</
box
>
</
style
>
<
style
name
=
"Table_CH"
mode
=
"Opaque"
backcolor
=
"#CACED0"
>
<
box
>
<
pen
lineWidth
=
"0.5"
lineColor
=
"#000000"
/>
<
topPen
lineWidth
=
"0.5"
lineColor
=
"#000000"
/>
<
leftPen
lineWidth
=
"0.5"
lineColor
=
"#000000"
/>
<
bottomPen
lineWidth
=
"0.5"
lineColor
=
"#000000"
/>
<
rightPen
lineWidth
=
"0.5"
lineColor
=
"#000000"
/>
</
box
>
</
style
>
<
style
name
=
"Table_TD"
mode
=
"Opaque"
backcolor
=
"#FFFFFF"
>
<
box
>
<
pen
lineWidth
=
"0.5"
lineColor
=
"#000000"
/>
<
topPen
lineWidth
=
"0.5"
lineColor
=
"#000000"
/>
<
leftPen
lineWidth
=
"0.5"
lineColor
=
"#000000"
/>
<
bottomPen
lineWidth
=
"0.5"
lineColor
=
"#000000"
/>
<
rightPen
lineWidth
=
"0.5"
lineColor
=
"#000000"
/>
</
box
>
<
conditionalStyle
>
<
conditionExpression
>
<![CDATA[$V{REPORT_COUNT}%2 == 0]]>
</
conditionExpression
>
<
style
backcolor
=
"#D8D8D8"
/>
</
conditionalStyle
>
</
style
>
<
subDataset
name
=
"tableDataset"
uuid
=
"f13e6d36-5148-4ecc-bbe3-3035def80980"
>
<
queryString
>
<![CDATA[]]>
</
queryString
>
</
subDataset
>
<
parameter
name
=
"invoiceNo"
class
=
"java.lang.String"
/>
<
parameter
name
=
"billingCompanyName"
class
=
"java.lang.String"
/>
<
parameter
name
=
"billingCompanyAddress"
class
=
"java.lang.String"
/>
<
parameter
name
=
"billingCompanyFirstState"
class
=
"java.lang.String"
/>
<
parameter
name
=
"billingCompanySecondState"
class
=
"java.lang.String"
/>
<
parameter
name
=
"shippingName"
class
=
"java.lang.String"
/>
<
parameter
name
=
"shippingAddress"
class
=
"java.lang.String"
/>
<
parameter
name
=
"shippingFirstState"
class
=
"java.lang.String"
/>
<
parameter
name
=
"shippingSecondState"
class
=
"java.lang.String"
/>
<
parameter
name
=
"IMAGE_PATH"
class
=
"java.lang.String"
/>
<
queryString
language
=
"SQL"
>
<![CDATA[]]>
</
queryString
>
<
field
name
=
"itemNo"
class
=
"java.lang.String"
/>
<
field
name
=
"description"
class
=
"java.lang.String"
/>
<
field
name
=
"unitCost"
class
=
"java.lang.Double"
/>
<
field
name
=
"quantity"
class
=
"java.lang.Integer"
/>
<
group
name
=
"Gruppo1"
>
<
groupExpression
>
<![CDATA[(int)($V{REPORT_COUNT}/15)]]>
</
groupExpression
>
<
groupHeader
>
<
band
/>
</
groupHeader
>
<
groupFooter
>
<
band
>
<
property
name
=
"local_mesure_unitheight"
value
=
"pixel"
/>
<
property
name
=
"com.jaspersoft.studio.unit.height"
value
=
"px"
/>
</
band
>
</
groupFooter
>
</
group
>
<
title
>
<
band
height
=
"196"
splitType
=
"Stretch"
>
<
staticText
>
<
reportElement
x
=
"0"
y
=
"90"
width
=
"84"
height
=
"25"
uuid
=
"57aed2b1-4f4e-40a3-a6ad-54dae8dd4c5a"
>
<
property
name
=
"local_mesure_unitheight"
value
=
"pixel"
/>
<
property
name
=
"com.jaspersoft.studio.unit.height"
value
=
"px"
/>
</
reportElement
>
<
textElement
>
<
font
size
=
"16"
isBold
=
"true"
/>
</
textElement
>
<
text
>
<![CDATA[Bill to:]]>
</
text
>
</
staticText
>
<
line
>
<
reportElement
x
=
"0"
y
=
"80"
width
=
"556"
height
=
"1"
uuid
=
"806ce5df-1219-4876-ae0c-ca7405b1f246"
>
<
property
name
=
"local_mesure_unitheight"
value
=
"pixel"
/>
<
property
name
=
"com.jaspersoft.studio.unit.height"
value
=
"px"
/>
</
reportElement
>
</
line
>
<
staticText
>
<
reportElement
x
=
"400"
y
=
"90"
width
=
"84"
height
=
"25"
uuid
=
"139ebe8d-25b0-411e-986c-270015400874"
>
<
property
name
=
"local_mesure_unitheight"
value
=
"pixel"
/>
<
property
name
=
"com.jaspersoft.studio.unit.height"
value
=
"px"
/>
</
reportElement
>
<
textElement
>
<
font
size
=
"16"
isBold
=
"true"
/>
</
textElement
>
<
text
>
<![CDATA[Ship to:]]>
</
text
>
</
staticText
>
<
staticText
>
<
reportElement
x
=
"415"
y
=
"10"
width
=
"50"
height
=
"20"
uuid
=
"0f86baff-6386-4f3f-b3fe-2388707babe8"
/>
<
box
rightPadding
=
"4"
/>
<
textElement
textAlignment
=
"Right"
/>
<
text
>
<![CDATA[Date:]]>
</
text
>
</
staticText
>
<
textField
pattern
=
"EEEEE dd MMMMM yyyy"
>
<
reportElement
x
=
"465"
y
=
"10"
width
=
"84"
height
=
"20"
uuid
=
"bb10dbe1-0a4f-4722-9953-c163b63cf979"
/>
<
textFieldExpression
>
<![CDATA[new java.util.Date()]]>
</
textFieldExpression
>
</
textField
>
<
image
hAlign
=
"Center"
>
<
reportElement
x
=
"0"
y
=
"0"
width
=
"65"
height
=
"60"
uuid
=
"94883631-a913-43e2-b182-ab8d77d0181e"
/>
<
imageExpression
>
<![CDATA[$P{IMAGE_PATH} + "/invoice_logo.png"]]>
</
imageExpression
>
</
image
>
<
textField
pattern
=
"EEEEE dd MMMMM yyyy"
>
<
reportElement
x
=
"465"
y
=
"30"
width
=
"84"
height
=
"20"
uuid
=
"3836ce65-eca3-4cad-a6de-b1818def0a2b"
/>
<
textFieldExpression
>
<![CDATA[$P{invoiceNo}]]>
</
textFieldExpression
>
</
textField
>
<
staticText
>
<
reportElement
x
=
"415"
y
=
"30"
width
=
"50"
height
=
"20"
uuid
=
"0b3f9342-da78-4cfa-9fc5-2301c4749678"
/>
<
box
rightPadding
=
"4"
/>
<
textElement
textAlignment
=
"Right"
/>
<
text
>
<![CDATA[Invoice #]]>
</
text
>
</
staticText
>
<
staticText
>
<
reportElement
x
=
"95"
y
=
"0"
width
=
"210"
height
=
"25"
uuid
=
"e622555d-198b-4ccd-a4a1-c59c53304058"
>
<
property
name
=
"local_mesure_unitheight"
value
=
"pixel"
/>
<
property
name
=
"com.jaspersoft.studio.unit.height"
value
=
"px"
/>
</
reportElement
>
<
textElement
>
<
font
size
=
"19"
isBold
=
"true"
/>
</
textElement
>
<
text
>
<![CDATA[I think, I sink!]]>
</
text
>
</
staticText
>
<
staticText
>
<
reportElement
x
=
"95"
y
=
"55"
width
=
"205"
height
=
"15"
uuid
=
"b8cc42fd-b569-497d-834d-7e854040ad18"
/>
<
text
>
<![CDATA[+20 10 000 0000]]>
</
text
>
</
staticText
>
<
staticText
>
<
reportElement
x
=
"95"
y
=
"25"
width
=
"205"
height
=
"15"
uuid
=
"c226e44d-3bb5-4145-b0b3-903bf1d79fde"
/>
<
text
>
<![CDATA[Sesame street]]>
</
text
>
</
staticText
>
<
staticText
>
<
reportElement
x
=
"95"
y
=
"40"
width
=
"205"
height
=
"15"
uuid
=
"b96f7183-44f8-43ad-ba60-43d8fbf50b6e"
/>
<
text
>
<![CDATA[Sesame city]]>
</
text
>
</
staticText
>
<
textField
>
<
reportElement
x
=
"0"
y
=
"115"
width
=
"150"
height
=
"15"
uuid
=
"7e9e0af2-08d1-4997-b3e1-971e74b1c8ad"
>
<
property
name
=
"local_mesure_unitheight"
value
=
"pixel"
/>
<
property
name
=
"com.jaspersoft.studio.unit.height"
value
=
"px"
/>
</
reportElement
>
<
textFieldExpression
>
<![CDATA[$P{billingCompanyName}]]>
</
textFieldExpression
>
</
textField
>
<
textField
>
<
reportElement
x
=
"0"
y
=
"130"
width
=
"150"
height
=
"15"
uuid
=
"a0eaddab-ed2f-46fc-b9fc-d0d9747c6df3"
>
<
property
name
=
"local_mesure_unitheight"
value
=
"pixel"
/>
<
property
name
=
"com.jaspersoft.studio.unit.height"
value
=
"px"
/>
</
reportElement
>
<
textFieldExpression
>
<![CDATA[$P{billingCompanyAddress}]]>
</
textFieldExpression
>
</
textField
>
<
textField
>
<
reportElement
x
=
"0"
y
=
"145"
width
=
"150"
height
=
"15"
uuid
=
"f9371f1e-125e-408d-a0f0-aa0ea5adc171"
>
<
property
name
=
"local_mesure_unitheight"
value
=
"pixel"
/>
<
property
name
=
"com.jaspersoft.studio.unit.height"
value
=
"px"
/>
</
reportElement
>
<
textFieldExpression
>
<![CDATA[$P{billingCompanyFirstState}]]>
</
textFieldExpression
>
</
textField
>
<
textField
>
<
reportElement
x
=
"0"
y
=
"160"
width
=
"150"
height
=
"15"
uuid
=
"c14d7758-80e6-45d7-8526-797330e515d3"
>
<
property
name
=
"local_mesure_unitheight"
value
=
"pixel"
/>
<
property
name
=
"com.jaspersoft.studio.unit.height"
value
=
"px"
/>
</
reportElement
>
<
textFieldExpression
>
<![CDATA[$P{billingCompanySecondState}]]>
</
textFieldExpression
>
</
textField
>
<
textField
>
<
reportElement
x
=
"400"
y
=
"160"
width
=
"140"
height
=
"15"
uuid
=
"a9baefea-45b3-4826-a81e-3572507eea6d"
>
<
property
name
=
"local_mesure_unitheight"
value
=
"pixel"
/>
<
property
name
=
"com.jaspersoft.studio.unit.height"
value
=
"px"
/>
</
reportElement
>
<
textFieldExpression
>
<![CDATA[$P{shippingSecondState}]]>
</
textFieldExpression
>
</
textField
>
<
textField
>
<
reportElement
x
=
"400"
y
=
"145"
width
=
"140"
height
=
"15"
uuid
=
"338e1f40-9a03-4b77-aedc-568b1907628b"
>
<
property
name
=
"local_mesure_unitheight"
value
=
"pixel"
/>
<
property
name
=
"com.jaspersoft.studio.unit.height"
value
=
"px"
/>
</
reportElement
>
<
textFieldExpression
>
<![CDATA[$P{shippingFirstState}]]>
</
textFieldExpression
>
</
textField
>
<
textField
>
<
reportElement
x
=
"400"
y
=
"130"
width
=
"140"
height
=
"15"
uuid
=
"54e6473f-44ef-4839-8f87-29e65af72561"
>
<
property
name
=
"local_mesure_unitheight"
value
=
"pixel"
/>
<
property
name
=
"com.jaspersoft.studio.unit.height"
value
=
"px"
/>
</
reportElement
>
<
textFieldExpression
>
<![CDATA[$P{shippingAddress}]]>
</
textFieldExpression
>
</
textField
>
<
textField
>
<
reportElement
x
=
"400"
y
=
"115"
width
=
"140"
height
=
"15"
uuid
=
"1f093c2e-2d6f-403e-9c11-160dbaf82e6f"
>
<
property
name
=
"local_mesure_unitheight"
value
=
"pixel"
/>
<
property
name
=
"com.jaspersoft.studio.unit.height"
value
=
"px"
/>
</
reportElement
>
<
textFieldExpression
>
<![CDATA[$P{shippingName}]]>
</
textFieldExpression
>
</
textField
>
</
band
>
</
title
>
<
columnHeader
>
<
band
height
=
"24"
>
<
staticText
>
<
reportElement
x
=
"366"
y
=
"4"
width
=
"80"
height
=
"20"
uuid
=
"be792358-dade-4931-965d-fe4d4958b71c"
/>
<
textElement
textAlignment
=
"Center"
>
<
font
size
=
"12"
isBold
=
"false"
/>
</
textElement
>
<
text
>
<![CDATA[Quantity]]>
</
text
>
</
staticText
>
<
rectangle
>
<
reportElement
mode
=
"Opaque"
x
=
"10"
y
=
"2"
width
=
"531"
height
=
"20"
backcolor
=
"#C0D4EC"
uuid
=
"ce42b0b0-0d12-48c1-8020-576969255150"
/>
<
graphicElement
>
<
pen
lineColor
=
"#666666"
/>
</
graphicElement
>
</
rectangle
>
<
staticText
>
<
reportElement
x
=
"430"
y
=
"3"
width
=
"111"
height
=
"18"
uuid
=
"95b85246-2e67-42d0-9e41-987314cddba0"
/>
<
textElement
textAlignment
=
"Center"
>
<
font
size
=
"12"
isBold
=
"false"
/>
</
textElement
>
<
text
>
<![CDATA[Price $]]>
</
text
>
</
staticText
>
<
staticText
>
<
reportElement
x
=
"261"
y
=
"3"
width
=
"80"
height
=
"20"
uuid
=
"40050754-f800-4283-a0ed-64894f5652a2"
/>
<
textElement
textAlignment
=
"Center"
>
<
font
size
=
"12"
isBold
=
"false"
/>
</
textElement
>
<
text
>
<![CDATA[Unit Cost $]]>
</
text
>
</
staticText
>
<
staticText
>
<
reportElement
x
=
"10"
y
=
"3"
width
=
"50"
height
=
"20"
uuid
=
"299467fd-8d2b-48b0-af5b-769cc9d9bb37"
/>
<
textElement
textAlignment
=
"Center"
>
<
font
size
=
"12"
isBold
=
"false"
/>
</
textElement
>
<
text
>
<![CDATA[Item]]>
</
text
>
</
staticText
>
<
staticText
>
<
reportElement
x
=
"71"
y
=
"2"
width
=
"179"
height
=
"20"
uuid
=
"9818ad45-9dc2-4e62-821c-953f3801de84"
/>
<
textElement
textAlignment
=
"Center"
>
<
font
size
=
"12"
isBold
=
"false"
/>
</
textElement
>
<
text
>
<![CDATA[Description]]>
</
text
>
</
staticText
>
<
staticText
>
<
reportElement
x
=
"347"
y
=
"3"
width
=
"80"
height
=
"20"
uuid
=
"f10ae7d8-7499-404a-a1ab-a2ce63b22b3b"
/>
<
textElement
textAlignment
=
"Center"
>
<
font
size
=
"12"
isBold
=
"false"
/>
</
textElement
>
<
text
>
<![CDATA[Quantity]]>
</
text
>
</
staticText
>
</
band
>
</
columnHeader
>
<
detail
>
<
band
height
=
"29"
>
<
textField
>
<
reportElement
x
=
"11"
y
=
"5"
width
=
"54"
height
=
"20"
uuid
=
"0cd6aa63-bd20-45fb-8543-51931badd2fc"
/>
<
textElement
textAlignment
=
"Left"
/>
<
textFieldExpression
>
<![CDATA[$F{itemNo}]]>
</
textFieldExpression
>
</
textField
>
<
textField
>
<
reportElement
x
=
"70"
y
=
"5"
width
=
"180"
height
=
"20"
uuid
=
"1be950c3-370a-43fa-9510-2ee8db740774"
/>
<
textElement
textAlignment
=
"Left"
/>
<
textFieldExpression
>
<![CDATA[$F{description}]]>
</
textFieldExpression
>
</
textField
>
<
textField
>
<
reportElement
x
=
"261"
y
=
"5"
width
=
"80"
height
=
"20"
uuid
=
"3637c327-f832-4e7c-bb82-4cf41e607ca6"
/>
<
textElement
textAlignment
=
"Left"
/>
<
textFieldExpression
>
<![CDATA[$F{unitCost}]]>
</
textFieldExpression
>
</
textField
>
<
textField
>
<
reportElement
x
=
"347"
y
=
"5"
width
=
"80"
height
=
"20"
uuid
=
"e9bfe6dc-7101-4d22-90a7-4766122c4e8a"
/>
<
textElement
textAlignment
=
"Left"
/>
<
textFieldExpression
>
<![CDATA[$F{quantity}]]>
</
textFieldExpression
>
</
textField
>
<
textField
>
<
reportElement
x
=
"430"
y
=
"5"
width
=
"118"
height
=
"20"
uuid
=
"77c9d024-651d-4207-9f32-8637cd4dd449"
/>
<
textElement
textAlignment
=
"Left"
/>
<
textFieldExpression
>
<![CDATA[$F{unitCost} * $F{quantity}]]>
</
textFieldExpression
>
</
textField
>
</
band
>
</
detail
>
<
lastPageFooter
>
<
band
height
=
"177"
>
<
staticText
>
<
reportElement
positionType
=
"Float"
x
=
"-1"
y
=
"30"
width
=
"261"
height
=
"101"
uuid
=
"1a0d7088-5af7-4865-8be1-41ec5f51fb36"
/>
<
box
>
<
topPen
lineWidth
=
"1.1"
lineStyle
=
"Dashed"
/>
<
leftPen
lineWidth
=
"1.1"
lineStyle
=
"Dashed"
/>
<
bottomPen
lineWidth
=
"1.1"
lineStyle
=
"Dashed"
/>
<
rightPen
lineWidth
=
"1.1"
lineStyle
=
"Dashed"
/>
</
box
>
<
text
>
<![CDATA[Your notes here]]>
</
text
>
</
staticText
>
<
staticText
>
<
reportElement
positionType
=
"Float"
mode
=
"Opaque"
x
=
"0"
y
=
"147"
width
=
"556"
height
=
"30"
backcolor
=
"#E6E8E9"
uuid
=
"36aa233d-4305-48e6-974a-1bbf89bb3c8f"
/>
<
textElement
textAlignment
=
"Center"
verticalAlignment
=
"Middle"
>
<
font
fontName
=
"Serif"
size
=
"9"
isItalic
=
"true"
/>
</
textElement
>
<
text
>
<![CDATA[THANKYOU FOR YOUR BUSINESS]]>
</
text
>
</
staticText
>
</
band
>
</
lastPageFooter
>
</
jasperReport
>
- Создание класса Item, который будет объектом модели, содержащим данные, которые будут связаны с полями шаблона JRXML. Также я создал класс InvoiceDetails, в котором будут данные, которые будут связаны с параметрами шаблона JRXML.
010203040506070809101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
package
com.ithinkisink.model;
/**
*
* @author Belal
*
*/
public
class
Item {
private
String itemNo;
private
String description;
private
double
unitCost;
private
int
quantity;
public
Item(String itemNo, String description,
double
unitCost,
int
quantity) {
super
();
this
.itemNo = itemNo;
this
.description = description;
this
.unitCost = unitCost;
this
.quantity = quantity;
}
public
String getItemNo() {
return
itemNo;
}
public
void
setItemNo(String itemNo) {
this
.itemNo = itemNo;
}
public
String getDescription() {
return
description;
}
public
void
setDescription(String description) {
this
.description = description;
}
public
double
getUnitCost() {
return
unitCost;
}
public
void
setUnitCost(
double
unitCost) {
this
.unitCost = unitCost;
}
public
int
getQuantity() {
return
quantity;
}
public
void
setQuantity(
int
quantity) {
this
.quantity = quantity;
}
}
- DynamicReportsManagedBean будет отвечать за подготовку карты параметров и источника JRBeanCollectionDataSource, содержащего List <Item>, который будет связан с полями JRXML.
001002003004005006007008009010011012013014015016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101
package
com.ithinkisink.managedbean;
import
static
net.sf.dynamicreports.report.builder.DynamicReports.report;
import
java.io.InputStream;
import
java.io.OutputStream;
import
java.io.Serializable;
import
java.util.ArrayList;
import
java.util.Arrays;
import
java.util.List;
import
java.util.Map;
import
javax.annotation.PostConstruct;
import
javax.enterprise.context.SessionScoped;
import
javax.inject.Named;
import
javax.servlet.ServletContext;
import
net.sf.dynamicreports.report.exception.DRException;
import
net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import
com.ithinkisink.model.InvoiceDetails;
import
com.ithinkisink.model.Item;
/**
*
* @author Belal
*
*/
@Named
@SessionScoped
public
class
DynamicReportsManagedBean
implements
Serializable {
private
static
final
long
serialVersionUID = -
1
;
private
String invoiceName;
private
JRBeanCollectionDataSource beanCollectionDataSource;
private
Map<String, Object> parameters;
@PostConstruct
public
void
init() {
invoiceName=
"Invoice.jrxml"
;
List<Item> itemList =
new
ArrayList<>(Arrays.asList(
new
Item(
"01"
,
"Item 01 description"
,
1.1
,
1
),
new
Item(
"02"
,
"Item 02 description"
,
2.2
,
2
),
new
Item(
"03"
,
"Item 03 description"
,
3.3
,
3
)));
beanCollectionDataSource =
new
JRBeanCollectionDataSource(itemList);
parameters = (
new
InvoiceDetails(
"INV#01"
,
"Billing Company"
,
"Billing Company Add"
,
"Billing Company State 1"
,
"Billing Company State 2"
,
"Shipping Name"
,
"Shipping Address"
,
"Shipping State 1"
,
"Shipping State 2"
,
1000
)).toMap();
}
/**
* Preparing an output stream of the generated PDF invoice.
*
* @return
*/
public
OutputStream getOS(ServletContext context, OutputStream outputStream) {
parameters.put(
"IMAGE_PATH"
, context.getRealPath(
"/jasper/invoices"
));
InputStream is = context.getResourceAsStream(
"/jasper/invoices/"
+ invoiceName);
try
{
report().setTemplateDesign(is)
.setDataSource(beanCollectionDataSource)
.setParameters(parameters).toPdf(outputStream);
}
catch
(DRException e) {
e.printStackTrace();
}
return
outputStream;
}
// setters and getters
public
String getInvoiceName() {
return
invoiceName;
}
public
void
setInvoiceName(String invoiceName) {
this
.invoiceName = invoiceName;
}
public
JRBeanCollectionDataSource getBeanCollectionDataSource() {
return
beanCollectionDataSource;
}
public
void
setBeanCollectionDataSource(
JRBeanCollectionDataSource beanCollectionDataSource) {
this
.beanCollectionDataSource = beanCollectionDataSource;
}
public
void
setParameters(Map<String, Object> parameters) {
this
.parameters = parameters;
}
public
Map<String, Object> getParameters() {
return
parameters;
}
}
- CDI позволяет нам внедрить экземпляр DynamicReportsManagedBean в DynamicReportsServlet. Сервлет будет обрабатывать поток вывода ответа, который будет представлять созданный поток вывода из DynamicReports шаблона.
01020304050607080910111213141516171819202122232425262728293031323334353637383940414243444546474849
package
com.ithinkisink.servlet;
import
java.io.IOException;
import
java.io.OutputStream;
import
javax.inject.Inject;
import
javax.servlet.ServletException;
import
javax.servlet.http.HttpServlet;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
import
com.ithinkisink.managedbean.DynamicReportsManagedBean;
/**
*
* @author Belal
*
*/
public
class
DynamicReportsServlet
extends
HttpServlet {
private
static
final
long
serialVersionUID = 1L;
@Inject
private
DynamicReportsManagedBean dynamicReportsManagedBean;
@Override
protected
void
doGet(HttpServletRequest req, HttpServletResponse resp)
throws
ServletException, IOException {
resp.setContentType(
"application/pdf"
);
OutputStream out = resp.getOutputStream();
out = dynamicReportsManagedBean.getOS(getServletContext(), out);
out.close();
}
@Override
protected
void
doPost(HttpServletRequest req, HttpServletResponse resp)
throws
ServletException, IOException {
super
.doPost(req, resp);
this
.doGet(req, resp);
}
public
void
setDynamicReportsManagedBean(
DynamicReportsManagedBean dynamicReportsManagedBean) {
this
.dynamicReportsManagedBean = dynamicReportsManagedBean;
}
public
DynamicReportsManagedBean getDynamicReportsManagedBean() {
return
dynamicReportsManagedBean;
}
}
- Я предпочитаю старую школу при добавлении сервлета в web.xml.
01020304050607080910111213141516171819202122
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
xsi:schemaLocation
=
"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
>
<
display-name
>DynamicReportsWithJSFServletsAndCDI Maven Webapp</
display-name
>
<
servlet
>
<
description
></
description
>
<
display-name
>DynamicReportsServlet</
display-name
>
<
servlet-name
>DynamicReportsServlet</
servlet-name
>
<
servlet-class
>com.ithinkisink.servlet.DynamicReportsServlet</
servlet-class
>
</
servlet
>
<
servlet-mapping
>
<
servlet-name
>DynamicReportsServlet</
servlet-name
>
<
url-pattern
>/*</
url-pattern
>
</
servlet-mapping
>
<
welcome-file-list
>
<
welcome-file
>/index.xhtml</
welcome-file
>
</
welcome-file-list
>
</
web-app
>
- Index.xhtml содержит <iframe>, который указывает на сервлет.
01020304050607080910111213141516
<!
DOCTYPE
html>
<
h:head
>
<
title
>DynamicReports with Servlets, JSF and CDI</
title
>
</
h:head
>
<
h:body
>
<
h:form
>
<
iframe
name
=
"receipt"
height
=
"600"
id
=
"theIFrame"
width
=
"100%"
</
h:form
>
</
h:body
>
</
html
>
- Окончательный вывод, запустив пример.
- Вы можете найти полный пример на моем Github по этой ссылке: https://github.com/belalgalal/Blogging/tree/master/DynamicReportsWithJSFServletsAndCDI
Ссылка: | DynamicReports и JasperReports с JSF, Servlet и CDI от нашего партнера JCG Белала Галала в « Я думаю, я потону»! блог. |