Hi Simon, 
again thanks for your help and patience ;-)
I was really wrong about what the contentStyle-attribute is about, thought it 
was for classes.
 
I found the snippet you posted very helpfull and, of course, everything worked 
this way ;-)
Nevertheless, I found it too unhandy to have a binding in every backing bean, 
since decorating components associated with a message is a recurring pattern, 
at least in my actual project. So I chose to change the class within the custom 
message-renderer (which was neccessary for the project anyway) and dont have to 
think about styling in my BackingBeans. Especially on pages with lots of input 
fields, all possibly related to a message, this seems to be a good approach.
 
Thanks for your hints, they led me a way to a working solution.
 
Regards,
Tom

 
________________________________

Von: Simon Lessard [mailto:[EMAIL PROTECTED] 
Gesendet: Dienstag, 4. März 2008 15:08
An: MyFaces Discussion
Betreff: Re: Why is the styleClass Property always overridden?


Hello Thomas,

contentStyle add direct CSS style, it's the inlineStyle equivalent applied to 
the content area. As for your use case, here's what you should be able to do:

In the skin:
af|inputText:error af|inputText::content
{
  border-color: red;
  border-style: solid;
  border-width: 2px;
}


In the page:
<tr:inputText styleClass="#{backing.styleClass}" binding="#{backing.input}"/>

In the bean:
private UIComponent input;

public UIComponent getInput()
{
  return input;
}

public void setInputUIComponent input)
{
  this.input = input;
}

public String getStyleClass()
{
  FacesContext context = FacesContext.getCurrentInstance();
  return context.getMessages(input.getClientId(context)).hasNext() ? "p_Error" 
: null;
}


Regards,

~ Simon


On Tue, Mar 4, 2008 at 8:40 AM, <[EMAIL PROTECTED]> wrote:


        
        Hi Simon, 
        thanks for your reply
         
        Well, I also tried the contentStyle attribute but again the only class 
that shows up in the vlass Attribute of the rendered <input> tag is 
'af_inputText_content'. 
        So it seems to me that the trinidad renderer overwrites what ever is 
ment to show up in the class attribute with the auto-generated skinning-class.
         
        Anyway, in this case I *have* to change the components attribute 
programmatically within a custom renderer for the <h:messages>-tag. Components 
that are associatedt with thrown FacesMessages should be visually highlighted 
by using a certain CSS-class. So I can't just use binding on the 
styleClass-Attribute but have zo mnaipulate the component from within the 
renderer.
         
        As described above, it works for JSF standard components, but not for 
those from Trinidad, so maybe i should focus on changing attributes of 
Trinidad-Components. Im not totally sure how this is done the right way. Ijust 
can't use the attributes map, right? So I have to use the FacesBean. How can I 
change properties on that?
         
        I tried this, but it didnt work:
         
        if(component instanceof UIXComponentBase) {
            UIXComponentBase trinidadComponent = (UIXComponentBase) component;
            ((FacesBean) 
trinidadComponent.getFacesBean()).setProperty(PropertyKey.createPropertyKey("styleClass"),
 styleClass);
        }
         
        Regards,
        Tom
________________________________

        Von: Simon Lessard [mailto:[EMAIL PROTECTED] 
        Gesendet: Montag, 3. März 2008 19:58
        An: MyFaces Discussion
        Betreff: Re: Why is the styleClass Property always overridden?
        
        
        Wow... really not my day... there's no such attribute... only 
contentStyle... I always create it when I make custom components... oh well... 
JIRA ticket time...
        
        
        On Mon, Mar 3, 2008 at 1:56 PM, Simon Lessard <[EMAIL PROTECTED]> wrote:
        

                Oups, I misread something. You need to use the 
contentStyleClass attribute to affect the input's style class, the styleClass 
attribute applies the class on the input container. 


                On Mon, Mar 3, 2008 at 1:53 PM, Simon Lessard <[EMAIL 
PROTECTED]> wrote:
                

                        Hello Thomas,
                        
                        why don't you simply use <tr:inputText 
styleClass="myClass"/>? If the class changes at runtime you can use 
<tr:inputText styleClass="#{bean.myClass}"/> or programatically:
                        
                        <tr:inputText binding="#{bean.input}"/>
                        
                        CoreInputText input;
                        
                        public CoreInputText getInput()
                        {
                          return input;
                        }
                        
                        public void setInput(CoreInputText input)
                        {
                          this.input = input;
                          this.input.setStyleClass("myClass");
                        }
                        
                        
                        Regards,
                        
                        ~ Simon 


                        On Mon, Mar 3, 2008 at 1:39 PM, <[EMAIL PROTECTED]> 
wrote:
                        


                                Hi everybody, 
                                Im stuck with a problem and may need a little 
help to get through. 
                                Basically all I want to do is to add the name 
of a CSS-class programmatically to the styleClass attribute so that somithing 
like this is rendered in HTML:

                                <input id="myText" class="af_inputText_content 
myClass" ...> 
                                The 'myClass' should be added to the class 
inserted by the skinning-renderer of Trinidad. 

                                Even the very basic approach of using the 
styleClass Attribute of <tr:inputText> does not work as only 
af_inputText_content is inserted as value for the class attribute.

                                Manipulating the componentes attribute map 
works for JSF-Standard-Components but not for Trinidad-Components. 
                                This is what my code looks like: 
                                                                Map<String, 
Object> attributes = component.getAttributes(); 
                                                                String 
styleClass = (String) attributes.get("styleClass"); 
                                                                // Append 
myClass to whatever is set as styleClass 
                                                                
attributes.put("styleClass", styleClass + " myClass");  

                                Do I have to use the acesBean for 
Trinidad-Components? If so, how can the styleClass-attribute be accessed? 

                                Thanks in advance, 
                                Tom 





                                Thomas Asel 
                                Diplom Informatiker (FH) 
                                Selbständiger Softwareentwickler 
                                im Auftrag der 24/7 IT-Services GmbH 

                                == == == == == == == == == == == == 
                                www.thomas-asel.de 
                                J2EE und Contentmanagement-Lösungen 
                                L13,7 68161 Mannheim 
                                Tel.: +49 (0) 621 / 386 448 3 
                                Mobil: +49(0) 176 / 219 284 26 
                                USt-IdNr.: DE248123620 





Reply via email to