myfaces-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Adam Winer" <awi...@gmail.com>
Subject Re: [Trinidad] Skinning - no CSS selector for tr:outputText?
Date Tue, 14 Aug 2007 18:05:01 GMT
The critical thing, which is easy to overlook, is that you
have to pass your component's Type object to the Renderer
superclasses constructor, which is what Simon's code is doing.

-- Adam



On 8/14/07, Simon Lessard <simon.lessard.3@gmail.com> wrote:
> Hello Carsten,
>
> Trinidad input components, as you most likely figured, include a label and
> its message. However, to allow maximum reuse, its renderer is splitted in
> two. There's always the "label and message renderer", ie InputTextRenderer
> that render the layout including the label and message and also delegate
> some work to the "field renderer" which is SimpleInputTextRenderer in the
> case of CoreInputText component. The shortDesc attribute is rendered on the
> field part so, for your override of getShortDesc to work, you'll have to
> also override SimpleInputTextRenderer and have your new InputTextRenderer's
> getFormInputRenderer returns your new SimpleInputTextRenderer.
>
> Here's a small example:
>
> public class MyNewInputTextRenderer extends InputTextRenderer
>  {
>   public MyNewInputTextRenderer()
>    {
>     this(MyNewInputComponent.TYPE);
>    }
>
>   protected MyNewInputTextRenderer(FacesBean.Type type)
>    {
>     super(type);
>    }
>
>   @Override
>   protected void findTypeConstants(FacesBean.Type type)
>    {
>     super.findTypeConstants(type);
>      simpleRenderer = new
> MyNewSimpleInputTextRenderer(type);
>   }
>
>   @Override
>   protected FormInputRenderer getFormInputRenderer()
>   {
>     return simpleRenderer;
>   }
>
>    private FormInputRenderer simpleRenderer;
> }
>
> public class MyNewSimpleInputTextRenderer extends SimpleInputTextRenderer
> {
>   public MyNewSimpleInputTextRenderer(FacesBean.Type type)
>    {
>      super(type);
>    }
>
>   @Override
>   protected String getShortDesc(FacesBean bean)
>   {
>     return super.getShortDesc (bean) + whateverExtraInfo;
>   }
>  }
>
> Regads,
>
> ~ Simon
>
>
>
> On 8/14/07, Carsten Pieper < carsten.pieper@continentale.de> wrote:
> >
> > Hi,
> >
> > I tried to debug the strange InputTextRenderer behaviour (in short: the
> > result of
> > my getShortDesc(FacesBean) seems to be overruled somehow) without any big
> > clue
> > where to start...
> >
> > Well, I put a breakpoint in the
> > org.apache.myfaces.trinidad.bean.FacesBeanImpl's
> > method setProperty(PropertyKey key, Object value) and looked at the
> millions
> > of keys and
> > values. When I almost gave up, I finally saw my "original" shortDesc as
> > value (and
> > shortDesc as key...). This is what the stack looked like:
> >
> > Thread [btpool0-1] (Suspended (breakpoint at line 100 in FacesBeanImpl))
> >
>         UIXEditableFacesBeanImpl(FacesBeanImpl).setProperty(PropertyKey,
> Object)
> > line: 100
> >         UIXEditableFacesBeanImpl.setProperty(PropertyKey,
> Object) line: 33
> >
>         CoreInputText(UIXComponentBase).setProperty(PropertyKey,
> Object) line: 1112
> >         CoreInputText.setShortDesc(String) line: 305
> >         NativeMethodAccessorImpl.invoke0(Method, Object,
> Object[]) line: not
> > available [native method]
> >         NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
> >         DelegatingMethodAccessorImpl.invoke(Object,
> Object[]) line: 25
> >         Method.invoke(Object, Object...) line: 585
> >
>         BeanPropertyTagRule$LiteralPropertyMetadata.applyMetadata(FaceletContext,
> > Object) line: 49
> >         MetadataImpl.applyMetadata(FaceletContext, Object) line: 36
> >
>         TrinidadComponentHandler(MetaTagHandler).setAttributes(FaceletContext,
> > Object) line: 62
> >
>         TrinidadComponentHandler(ComponentHandler).apply(FaceletContext,
> > UIComponent) line: 144
> >         DefineHandler.apply(FaceletContext, UIComponent) line: 58
> >         CompositionHandler.apply(FaceletContext, UIComponent, String)
> line: 128
> >
>         DefaultFaceletContext$TemplateManager.apply(FaceletContext,
> UIComponent,
> > String) line: 306
> >
>         DefaultFaceletContext.includeDefinition(UIComponent,
> String) line: 279
> >         InsertHandler.apply(FaceletContext, UIComponent) line: 68
> >         CompositeFaceletHandler.apply(FaceletContext, UIComponent) line:
> 47
> >
>         TrinidadComponentHandler(ComponentHandler).applyNextHandler(FaceletContext,
> > UIComponent) line: 314
> >
>         TrinidadComponentHandler(ComponentHandler).apply(FaceletContext,
> > UIComponent) line: 169
> >          CompositeFaceletHandler.apply(FaceletContext, UIComponent) line:
> 47
> >
>         TrinidadComponentHandler(ComponentHandler).applyNextHandler(FaceletContext,
> > UIComponent) line: 314
> >
>         TrinidadComponentHandler(ComponentHandler).apply(FaceletContext,
> > UIComponent) line: 169
> >
>         TrinidadComponentHandler(ComponentHandler).applyNextHandler(FaceletContext,
> > UIComponent) line: 314
> >
>         TrinidadComponentHandler(ComponentHandler).apply(FaceletContext,
> > UIComponent) line: 169
> >         CompositeFaceletHandler.apply(FaceletContext, UIComponent) line:
> 47
> >
>         TrinidadComponentHandler(ComponentHandler).applyNextHandler(FaceletContext,
> > UIComponent) line: 314
> >
>         TrinidadComponentHandler(ComponentHandler).apply(FaceletContext,
> > UIComponent) line: 169
> >         NamespaceHandler.apply(FaceletContext, UIComponent) line: 49
> >         CompositeFaceletHandler.apply(FaceletContext, UIComponent) line:
> 47
> >         EncodingHandler.apply(FaceletContext, UIComponent) line: 25
> >         DefaultFacelet.include(DefaultFaceletContext, UIComponent) line:
> 248
> >         DefaultFacelet.include(DefaultFaceletContext, UIComponent, URL)
> line: 294
> >         DefaultFacelet.include(DefaultFaceletContext, UIComponent, String)
> line:
> > 273
> >         DefaultFaceletContext.includeFacelet(UIComponent,
> String) line: 143
> >         CompositionHandler.apply(FaceletContext, UIComponent) line: 113
> >         NamespaceHandler.apply(FaceletContext, UIComponent) line: 49
> >         EncodingHandler.apply(FaceletContext, UIComponent) line: 25
> >         DefaultFacelet.apply(FacesContext, UIComponent) line: 95
> >         FaceletViewHandler.buildView(FacesContext, UIViewRoot) line: 503
> >          FaceletViewHandler.renderView(FacesContext, UIViewRoot) line: 546
> >         ViewHandlerImpl.renderView(FacesContext, UIViewRoot) line: 182
> >         RenderResponseExecutor.execute(FacesContext) line: 41
> >         LifecycleImpl.render (FacesContext) line: 138
> >         FacesServlet.service(ServletRequest, ServletResponse) line: 141
> >         ServletHolder.handle(ServletRequest, ServletResponse) line: 487
> >
>         ServletHandler$CachedChain.doFilter(ServletRequest,
> ServletResponse) line:
> > 1098
> >
>         TrinidadFilterImpl._invokeDoFilter(ServletRequest,
> ServletResponse,
> > FilterChain) line: 241
> >         TrinidadFilterImpl._doFilterImpl(ServletRequest,
> ServletResponse,
> > FilterChain) line: 198
> >          TrinidadFilterImpl.doFilter(ServletRequest, ServletResponse,
> FilterChain)
> > line: 152
> >         TrinidadFilter.doFilter(ServletRequest, ServletResponse,
> FilterChain) line:
> > 92
> >
>         ServletHandler$CachedChain.doFilter(ServletRequest,
> ServletResponse) line:
> > 1089
> >         ServletHandler(ServletHandler).handle(String,
> HttpServletRequest,
> > HttpServletResponse, int) line: 365
> >         SecurityHandler.handle(String, HttpServletRequest,
> HttpServletResponse,
> > int) line: 216
> >         SessionHandler.handle(String, HttpServletRequest,
> HttpServletResponse, int)
> > line: 181
> >         WebAppContext(ContextHandler).handle(String,
> HttpServletRequest,
> > HttpServletResponse, int) line: 712
> >          WebAppContext.handle(String, HttpServletRequest,
> HttpServletResponse, int)
> > line: 405
> >         ContextHandlerCollection.handle(String, HttpServletRequest,
> > HttpServletResponse, int) line: 211
> >         HandlerCollection.handle (String, HttpServletRequest,
> HttpServletResponse,
> > int) line: 114
> >         Server(HandlerWrapper).handle(String,
> HttpServletRequest,
> > HttpServletResponse, int) line: 139
> >         Server.handle(HttpConnection) line: 285
> >         HttpConnection.handleRequest() line: 502
> >         HttpConnection$RequestHandler.headerComplete()
> line: 821
> >         HttpParser.parseNext() line: 513
> >         HttpParser.parseAvailable() line: 208
> >          HttpConnection.handle() line: 378
> >
>         SelectChannelConnector$ConnectorEndPoint(SelectChannelEndPoint).run()
> line:
> > 368
> >         BoundedThreadPool$PoolThread.run() line: 442
> >
> > Note:
> > I don't know, if this is important in this context, but I forgot to say
> (and
> > you'll notice
> > by looking at the stack), we're working in a Facelets context.
> >
> > One thing which I notice in the stack is that the CoreInputText's
> > setShortDesc(String) is
> > called. Setting a breakpoint there shows that it's just called once per
> > inputText instance,
> > setting the original shortDesc and not the "concatenated" one.
> >
> > I got the impression, that this one call sets the shortDesc in the
> > FacesBeanImpl instance
> > which then somehow "wins over" my
> > InputTextExtRenderer.getShortDesc(FacesBean).
> > Am I right about this and if yes, is this the expected behaviour or is
> > something wrong there?
> >
> > By the way, does the CoreInputText come into play via the
> > InputTextRenderer's constructor (shown below) or is there some other
> > mechanism?
> >
> >   public InputTextRenderer()
> >   {
> >     super(CoreInputText.TYPE);
> >   }
> >
> > Help would be greatly appreciated,
> > Carsten
> >
> >
> >
> > Carsten Pieper wrote:
> > >
> > > Hi,
> > >
> > > as Simon adviced, I'm implementing the getXyz(FacesBean) methods now. In
> > > my
> > > new OutputTextSkinnedRenderer (extending CoreOutputTextRenderer) this
> > > method
> > > worked fine (if no tooltip is given, the value itself should be
> presented,
> > > if a tooltip
> > > is given, original tooltip and value should both she shown):
> > >
> > >   @Override
> > >   protected String getShortDesc(FacesBean bean)
> > >   {
> > >     String originalShortDesc = super.getShortDesc(bean);
> > >     String shortDesc = null;
> > >     String valueAsString = (String) getValue(bean);
> > >
> > >     if (originalShortDesc != null && originalShortDesc.length() >
0)
> > >     {
> > >       shortDesc = originalShortDesc + " - Field value: " +
> valueAsString;
> > >     }
> > >     else
> > >     {
> > >       shortDesc = valueAsString;
> > >     }
> > >
> > >     return shortDesc;
> > >   }
> > >
> > > The same method also works fine in OutputTextExtRenderer (extends
> > > OutputTextRenderer).
> > >
> > > A similar method (with slight variations as there seems to be no
> > > getValue(FacesBean)
> > > neither in InputTextRenderer nor in the rest of the hierarchy) in
> > > InputTextExtRenderer (extends InputTextRenderer) doesn't lead to the
> > > desired
> > > result.
> > >
> > > If a shortDesc is defined, only this and not the concatenated form is
> > > presented as tooltip.
> > > The method itself still seems to function properly, but I got the
> > > impression, that afterwards
> > > something else is called, which then resets the shortDesc to "just the
> > > shortDesc" :-O
> > >
> > > Any ideas?
> > >
> > > Thanks in advance,
> > > Carsten
> > >
> > >
> > >
> > > Carsten Pieper wrote:
> > >>
> > >> Thanks a lot for the valued advice, Simon and Martin,
> > >>
> > >> so I'll have a go at Simon's recommendation. Just a question concerning
> > >> your remarks
> > >> to my approach with pushing things into the bean: Would that approach
> be
> > >> OK,
> > >> if I'd tidied everything up? Something like the following (in my
> > >> overwritten encodeAll(...)):
> > >>
> > >> // storing old bean values, altering bean values...
> > >>
> > >> super.encodeAll(context, arc, component, bean);
> > >>
> > >> // restoring old bean values
> > >>
> > >> Well, this (incl. tidying up)  is how I've been showed to do this but
> > >> probably I've been a little
> > >> careless as I've never made use of these onkeyxxx properties ...
> > >>
> > >> Best regards,
> > >> Carsten
> > >>
> > >>
> > >>
> > >> Martin Marinschek wrote:
> > >>>
> > >>> Just as added information: what Simon says holds true also for
> > >>> standard JSF (non-Trinidad components)...
> > >>>
> > >>> regards,
> > >>>
> > >>> Martin
> > >>>
> > >>> On 8/13/07, Simon Lessard <simon.lessard.3@gmail.com> wrote:
> > >>>> Hello again,
> > >>>>
> > >>>> I forgot to mention another issue with pushing values in the
> FacesBean
> > >>>> inside renderer code. Assume that your styleClass attribute is
set to
> > >>>> an EL.
> > >>>> If the EL returns "readOnly" during a rendering, you're going to
> alter
> > >>>> the
> > >>>> component attributes permanently and the JavaScript events will
> > >>>> continue to
> > >>>> return false even if the styleClass is no longer "readOnly" for
> further
> > >>>> requests.
> > >>>>
> > >>>>
> > >>>> Regards,
> > >>>>
> > >>>> ~ Simon
> > >>>>
> > >>>>
> > >>>> On 8/13/07, Simon Lessard <simon.lessard.3@gmail.com> wrote:
> > >>>> > Hello Carsten,
> > >>>> >
> > >>>> > You shouldn't alter the bean value in the renderer. It's not
right
> to
> > >>>> do
> > >>>> so. Instead, you should override the various getXyz(FacesBean)
method
> > >>>> of the
> > >>>> renderer. This will ensure that you safely overhaul all properties
> > >>>> without
> > >>>> pushing value strange values in the saved state.
> > >>>> >
> > >>>> > Also, since the renderer is the most complex part of component
> > >>>> creation,
> > >>>> why don't you create a new custom one like outputSkinnedText or
> > >>>> something?
> > >>>> The component can extends CoreOutputText simply using a different
> > >>>> renderer
> > >>>> type. The renderer can extends CoreOutputTextRenderer and simply
use
> > >>>> the
> > >>>> following code:
> > >>>> >
> > >>>> > public OutputSkinnedRenderer extends OutputTextRenderer
> > >>>> > {
> > >>>> >   public OutputSkinnedRenderer()
> > >>>> >   {
> > >>>> >     super(CoreOutputSkinned.TYPE);
> > >>>> >   }
> > >>>> >
> > >>>> >   public void encodeAll(FacesContext     context,
> > >>>> >                         RenderingContext rc,
> > >>>> >                         UIComponent      component,
> > >>>> >                         FacesBean        bean) throws IOException
> > >>>> >   {
> > >>>> >     ResponseWriter writer = context.getResponseWriter();
> > >>>> >
> > >>>> >     // Create a wrapping span
> > >>>> >     writer.startElement("span", component);
> > >>>> >
> > >>>> >     // Write our new skin selector
> > >>>> >     renderStyleClass(context, rc, "af|outputSkinnedText");
> > >>>> >
> > >>>> >     // Render the text normally
> > >>>> >     super.encodeAll(context, rc, component, bean);
> > >>>> >
> > >>>> >     // Close the wrapping span element
> > >>>> >     writer.endElement("span");
> > >>>> >   }
> > >>>> > }
> > >>>> >
> > >>>> >
> > >>>> >
> > >>>> > Regards,
> > >>>> >
> > >>>> > ~ Simon
> > >>>> >
> > >>>> > On 8/13/07, Carsten Pieper <carsten.pieper@continentale.de
> wrote:
> > >>>> >
> > >>>> > >
> > >>>> > > Hi,
> > >>>> > >
> > >>>> > > as most of you might have noticed the topic of this thread
> somehow
> > >>>> drifted
> > >>>> > > from
> > >>>> > > tr:outputText to tr:inputText...
> > >>>> > >
> > >>>> > > Anyhow, I implemented my option 2) (new styleClass "readOnly"),
> > >>>> which is
> > >>>> > > running fine except of
> > >>>> > > one issue (inherent to this approach with onxxx -->
return
> false;).
> > >>>> If
> > >>>> the
> > >>>> > > text is getting to long
> > >>>> > > for my inputText it's now accessible via the mouse but
not (since
> > >>>> the
> > >>>> > > onkeyxxx stuff...) via
> > >>>> > > the keyboard.
> > >>>> > >
> > >>>> > > If anybody is interested in this non-keyboard-only solution,
here
> > >>>> it is:
> > >>>> > >
> > >>>> > > In CSS (just note the "nested selector"; the stuff between
the
> > >>>> brackets
> > >>>> > > isn't important/belongs to you...):
> > >>>> > >
> > >>>>
> -----------------------------------------------------------------------------------------------------
> > >>>> > > .readOnly af|inputText::content{
> > >>>> > >     -tr-rule-ref:
> selector(".AFTextBackground:alias");
> > >>>> > >     -tr-rule-ref:
> > >>>> selector(".MyDisplayTextBorder:alias");
> > >>>> > > }
> > >>>> > >
> > >>>> > > Extending InputTextRenderer:
> > >>>> > > ----------------------------
> > >>>> > > package bla;
> > >>>> > >
> > >>>> > > import java.io.IOException;
> > >>>> > >
> > >>>> > > import javax.faces.component.UIComponent;
> > >>>> > > import javax.faces.context.FacesContext;
> > >>>> > >
> > >>>> > > import
> org.apache.myfaces.trinidad.bean.FacesBean ;
> > >>>> > > import
> org.apache.myfaces.trinidad.bean.PropertyKey;
> > >>>> > > import
> > >>>>
> org.apache.myfaces.trinidad.context.RenderingContext;
> > >>>> > > import
> > >>>> > >
> > >>>>
> org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.InputTextRenderer
> > >>>> ;
> > >>>> > >
> > >>>> > > public class InputTextExtRenderer extends InputTextRenderer
> > >>>> > > {
> > >>>> > >
> > >>>> > >   public InputTextExtRenderer()
> > >>>> > >   {
> > >>>> > >     super();
> > >>>> > >   }
> > >>>> > >
> > >>>> > >   @Override
> > >>>> > >   protected void findTypeConstants(FacesBean.Type type)
> > >>>> > >   {
> > >>>> > >     super.findTypeConstants(type);
> > >>>> > >     _styleClassKey = type.findKey("styleClass");
> > >>>> > >     _onkeyupKey = type.findKey("onkeyup");
> > >>>> > >     _onkeydownKey = type.findKey("onkeydown");
> > >>>> > >     _onkeypressKey = type.findKey("onkeypress");
> > >>>> > >   }
> > >>>> > >
> > >>>> > >   @Override
> > >>>> > >   protected void
> encodeAll(FacesContext        context,
> > >>>> > >       RenderingContext arc,
> > >>>> > >       UIComponent         component,
> > >>>> > >       FacesBean           bean) throws IOException
> > >>>> > >   {
> > >>>> > >     String styleClass =
> > >>>> (String)bean.getProperty(_styleClassKey);
> > >>>> > >     if
> > >>>>
> (READONLY_INPUT_TEXT_SELECTOR.equalsIgnoreCase(styleClass))
> > >>>> > >     {
> > >>>> > >       bean.setProperty(_onkeyupKey, RETURN_FALSE);
> > >>>> > >       bean.setProperty (_onkeydownKey, RETURN_FALSE);
> > >>>> > >       bean.setProperty(_onkeypressKey, RETURN_FALSE);
> > >>>> > >     }
> > >>>> > >
> > >>>> > >     super.encodeAll(context, arc, component, bean);
> > >>>> > >   }
> > >>>> > >
> > >>>> > >   private static String READONLY_INPUT_TEXT_SELECTOR
=
> "readOnly";
> > >>>> > >   private static String RETURN_FALSE = "return false;";
> > >>>> > >
> > >>>> > >   private PropertyKey _styleClassKey;
> > >>>> > >   private PropertyKey _onkeyupKey;
> > >>>> > >   private PropertyKey _onkeydownKey;
> > >>>> > >   private PropertyKey _onkeypressKey;
> > >>>> > > }
> > >>>> > >
> > >>>> > > Configuring the faces-config.xml:
> > >>>> > > -------------------------------
> > >>>> > >                 <renderer>
> > >>>> > >                         <component-family>
> > >>>> > >
> > >>>> org.apache.myfaces.trinidad.Input
> > >>>> > >                         </component-family>
> > >>>> > >                         <renderer-type>
> > >>>> > >
> > >>>> org.apache.myfaces.trinidad.Text
> > >>>> > >                         </renderer-type>
> > >>>> > >                         <renderer-class>
> > >>>> > >
> > >>>>
> de.continentale.vu.jsf.base.component.trinidad.InputTextExtRenderer
> > >>>> > >                         </renderer-class>
> > >>>> > >                 </renderer>
> > >>>> > >
> > >>>> > > Using it in the JSF page:
> > >>>> > > -----------------------
> > >>>> > > <tr:inputText label="My short inputText (styleClass:
readOnly;)"
> > >>>> > >         value="Hello inputText" contentStyle="width:
50px;"
> > >>>> > >         styleClass="readOnly"></tr:inputText>
> > >>>> > >
> > >>>> > > Cheers, Carsten
> > >>>> > >
> > >>>> > > -
> > >>>> > >
> > >>>> > > Carsten Pieper wrote:
> > >>>> > > >
> > >>>> > > > Hi Martin,
> > >>>> > > >
> > >>>> > > > yes, that works, thank you!
> > >>>> > > >
> > >>>> > > > Some thoughts, though:  Without touching the renderer
this
> would
> > >>>> mean
> > >>>> that
> > >>>> > > > (as in your example) the inputText's attribute readOnly
must
> not
> > >>>> be
> > >>>> set or
> > >>>> > > > else the effect of these onxxx methods returning
false would be
> > >>>> bypassed.
> > >>>> > > >
> > >>>> > > > When chosing to extend the InputTextRenderer there
are two
> > >>>> options (at
> > >>>> > > > least ;-) ):
> > >>>> > > >
> > >>>> > > > 1) If attribute readOnly (or attribute disabled;
should be
> > >>>> treated
> > >>>> equally
> > >>>> > > > in our application, but
> > >>>> > > > this, of course, isn't the default...) is set to
true, do this
> in
> > >>>> the
> > >>>> new
> > >>>> > > > renderer:
> > >>>> > > > - get rid of default readOnly-behaviour (which might
be tricky
> to
> > >>>> "extract
> > >>>> > > > and eliminate")
> > >>>> > > > - set those onxxx to "return false;"
> > >>>> > > >
> > >>>> > > > 2) Alternatively, leave attribute readOnly and according
> > >>>> behaviour
> > >>>> > > > untouched. Instead,
> > >>>> > > > - invent a new style class (e.g. "readOnly")
> > >>>> > > > - in the CSS, for this style class use the same
settings as for
> > >>>> > > > "af|inputText:disabled::content"
> > >>>> > > > - in the renderer, if styleClass = "readOnly" set
those onxxx
> to
> > >>>> "return
> > >>>> > > > false;"
> > >>>> > > >
> > >>>> > > > In principle, option 1) would be my favourite solution,
but due
> > >>>> to the
> > >>>> > > > intricate situation
> > >>>> > > > (InputTextRenderer has quite a line of ancestors...)
and me
> being
> > >>>> new
> > >>>> to
> > >>>> > > > the fine art of
> > >>>> > > > extending Trinidad renderers, which both makes it
hard to
> isolate
> > >>>> what
> > >>>> > > > happens where and
> > >>>> > > > how to replace it, I think option 2) is the way
for us to go
> > >>>> (just
> > >>>> > > > injecting the new behaviour
> > >>>> > > > for styleClass "readOnly" and delegating everything
else to
> > >>>> > > > InputTextRenderer seems to be
> > >>>> > > > a lot easier...).
> > >>>> > > >
> > >>>> > > > Best regards,
> > >>>> > > > Carsten
> > >>>> > > >
> > >>>> > > >
> > >>>> > > >
> > >>>> > > > Martin Marinschek wrote:
> > >>>> > > >>
> > >>>> > > >> Hi Carsten,
> > >>>> > > >>
> > >>>> > > >> (for reference, I'm also posting this message
in the original
> > >>>> thread)
> > >>>> > > >>
> > >>>> > > >> I've played around with the options a bit more,
and this is
> what
> > >>>> could
> > >>>> > > >> work - with this you'd have an input field (and
therefore
> > >>>> automatic
> > >>>> > > >> text-control by the browser), and then you could
also
> > >>>> effectively
> > >>>> > > >> disable the keyboard:
> > >>>> > > >>
> > >>>> > > >>   <label for="text">Textfield:</label><input
> > >>>> id="text" name="text"
> > >>>> > > >> type="text" value="irgendwas" onkeyup="return
false;"
> > >>>> > > >> onkeydown="return false;" onkeypress="return
false;" />
> > >>>> > > >>
> > >>>> > > >> regards,
> > >>>> > > >>
> > >>>> > > >> Martin
> > >>>> > > >>
> > >>>> > > >> ...
> > >>>> > > >>
> > >>>> > > >> --
> > >>>> > > >>
> > >>>> > > >> http://www.irian.at
> > >>>> > > >>
> > >>>> > > >> Your JSF powerhouse -
> > >>>> > > >> JSF Consulting, Development and
> > >>>> > > >> Courses in English and German
> > >>>> > > >>
> > >>>> > > >> Professional Support for Apache MyFaces
> > >>>> > > >>
> > >>>> > > >>
> > >>>> > > >
> > >>>> > > >
> > >>>> > >
> > >>>> > > --
> > >>>> > > View this message in context:
> > >>>>
> http://www.nabble.com/-Trinidad--Skinning---no-CSS-selector-for-tr%3AoutputText--tf4247489.html#a12127815
> > >>>> > > Sent from the MyFaces - Users mailing list archive at
Nabble.com.
> > >>>> > >
> > >>>> > >
> > >>>> >
> > >>>> >
> > >>>>
> > >>>>
> > >>>
> > >>>
> > >>> --
> > >>>
> > >>> http://www.irian.at
> > >>>
> > >>> Your JSF powerhouse -
> > >>> JSF Consulting, Development and
> > >>> Courses in English and German
> > >>>
> > >>> Professional Support for Apache MyFaces
> > >>>
> > >>>
> > >>
> > >>
> > >
> > >
> >
> > --
> > View this message in context:
> http://www.nabble.com/-Trinidad--Skinning---no-CSS-selector-for-tr%3AoutputText--tf4247489.html#a12145017
> > Sent from the MyFaces - Users mailing list archive at Nabble.com.
> >
> >
>
>

Mime
View raw message