2009-12-15 8 views
2

Est-ce que quelqu'un a essayé d'importer des classes définies par l'utilisateur dans un rapport jasper (fichier .jrxml)? Je souhaite utiliser une classe Util (définie par l'utilisateur) dans mon rapport jasper pour cuire certains attributs du bean. J'utilise la source de données JavabeanAccéder/importer des classes définies par l'utilisateur dans jrxml

S'il vous plaît laissez-moi savoir si vous avez besoin de plus amples explications.

syntaxe

importer la classe est

<import value="java.util.HashMap"/> 

Je veux utiliser

<import value="mypackage.MyUtil" /> 
.... 
.... 
<field name="myVar" class="java.lang.String"> 
    <fieldDescription><![CDATA[MyUtil.cook(myData)]]> 
    </fieldDescription> 
</field> 

La définition simple pour MyUtil.java pourrait être

package mypackage; 
public class MyUtil 
{ 
    public static String cook(String data) 
    { 
     return data + "_cooked"; 
    } 
} 

Répondre

6

Je pense que j'aurais dû essayer suffisamment avant de demander cela.

Il n'y a rien besoin en dehors de supplémentaire Il y a deux sections: jrxml 1. Définition des champs de la source javabean 2. A l'aide des champs définis à l'étape 1. peupleront les valeurs dans la bande de détail

Je tentais pour cuire la valeur des membres javabean avant même qu'ils ne soient utilisés pour créer des champs Donc, jasper essayait d'analyser cette 'expression' en tant que membre javabean.

Suite est faux

<field name="myVar" class="java.lang.String"> 
    <fieldDescription><![CDATA[MyUtil.cook(myData)]]> 
    </fieldDescription> 
</field> 

Quand je la classe Util sur la valeur de terrain, il a travaillé.

<textField> 
    <reportElement x="200" y="0" width="100" height="13"/> 
    <textElement/> 
    <textFieldExpression class="java.lang.String"> 
     <![CDATA[MyUtil.cook($F{myVar})]]> 
    </textFieldExpression> 
</textField> 

Merci Nayn

+0

+1 pour l'auto-apprentissage. Dans des cas comme celui-ci, vous voyez à quel point il est préférable d'utiliser iReport. – medopal

+0

ouais .. J'aime iReport. Mais malheureusement, cela ne fonctionne pas pour ma source de données javabean. Pour des raisons inconnues, cela ne me permet pas de créer une source de données javabean. "Exception générale: Null" est ce que je reçois. Mes haricots java ont un champ enum à l'intérieur de celui-ci en dehors du getter/setter normal pour les champs. Les champs enum sont utilisés de manière similaire à la réflexion java pour accéder aux noms de champs par programme, si nécessaire.C'est plus rapide que la réflexion. – Nayn

+1

Ehm, peut-être que vous pouvez poser une autre question pour le problème de la source de données? C'est une meilleure façon d'avoir des choses pré-compilées (au cas où vous ne les génèreriez pas dynamiquement) – Bozho

3

Vous devez définir le classpath dans votre iReport. Cela dépend de sa version, mais est généralement sous Settings/Classpath

+0

Je n'utilise pas iReport. – Nayn

+0

bien, alors ça devrait juste marcher. Que vous dit le compilateur? – Bozho

+0

net.sf.jasperreports.engine.JRException: Erreur lors de la récupération de la valeur de champ à partir du bean: WireServiceUtil.getLinkedWires (wireRelationships) .... Causée par: java.lang.NoSuchMethodException: propriété inconnue 'WireServiceUtil'. Pour mettre plus de lumière sur ceci, 'WireServiceUtil' est contenu dans un autre pot que celui où réside jrxml. Mais c'est sur classpath – Nayn