Hi Dominik,

Sorry to answer your post so lately... I'm noot as present as I would like
on the forum.
So correct me if I misunsterstood your demand:
1./ Your bean tells you the category you want to display a message for
2./ Your messages are in bundle
3./ You want to  display the proper message accoording to the catecory.

So have you simply tried this?

<h:outputText value="#{Msg[myBean.categoryId]}"/>

According to your sample, message bundle have to look like this:
CatA=Category A
CatB=Category B
CatC=Category C

instead of

Category_A=Category A
Category_B=Category B
Category_C=Category C

You also need all possible values to be bound in the bundle to avoid
receiving odd missingResource message.

HTH

Harry,


2006/10/25, Bieringer Dominik <[EMAIL PROTECTED]>:

 Hi all,



today I've wondered again about how to convert property values of Beans to
locale specific strings in the presentation layer. To make it clear what I
want to do, I will show you a small example (This code is not compileable…
It's just for demonstration purpose):



Consider a class MyBean:



public class MyBean {

            public String getCategoryId();  // Can get values 'CatA',
'CatB', 'CatC'

}



Now consider having JSF code like this:



<h:panelGroup>

            <h:outputText value="#{myBean.categoryId}"/>

</h:panelGroup>



This would produce output like this on my webpage:



'CatA' or 'CatB' or 'CatC'



The problem is that I don't want to display these raw values of the
JavaBean, instead I want to display specific strings stored somewhere in the
presentation layer, for example in a message.properties file, which I can
use in the JSP file. But how to do that efficiently and what"s the best
practice for doing so? I frequently have this problem, not only with String
types, but also with Java 1.5 Enum types….



At the moment I am solving the problem the following way: I am using a
message.property file for JSF… which looks like the following:



Category_A=Category A

Category_B=Category B

Category_C=Category C



Next I am rewriting the JavaBean class, so that it look's like the
following:



public class MyBean {

            public String getCategoryId();  // Can get values 'CatA',
'CatB', 'CatC'



            public boolean getIsCategoryA() {

                        return (this.getCategoryId().equals("CatA"));

            }



            …

}



Then I can change my JSF code to look like the following:



<h:panelGroup>

            <h:outputText value="#{Msg.Category_A}" rendered="#{
myBean.isCategoryA}"/>

            <h:outputText value="#{Msg.Category_B}" rendered="#{
myBean.isCategoryB}"/>

            <h:outputText value="#{Msg.Category_C}" rendered="#{
myBean.isCategoryC}"/>

</h:panelGroup>



I accepted this method at first, but as I've already said, I'm having this
problem very often and I don't feel comfortable about doing it that way..
that's not really beautiful and get's really cumbersome if there are more
than 3 different possibilities….



I know that there must be a mapping of the Java bean values and the
message.properties file, but I don't think that it's a good idea to change
the JavaBean class to reflect my need… For me the bean is not part of the
presentation layer any more….



I am looking forward to get some feedback and to hear about how you are
solving this problem.



Thx in advance,

Dominik

Reply via email to