I forwarded the thread to Ed, as neither Adam, Craig, Kito or Manfred had anything to say on this... or do they?
There is an alternative workaround: I checked it in RendererUtils yesterday - for you to review. However, I think it makes the value lookup code in the renderer very complicated. It might cause less issues with compatibility to the RI behaviour, though. regards, Martin On 3/2/07, Cagatay Civici <[EMAIL PROTECTED]> wrote:
> Yeah, exactly. Did you read my mail from before? Plus my new issue-evaluation? No, I read your mail after sending a reply about the converter, anyway you're right about the bug Martin. > In this case, I'd strongly recommend that you run this by the spec > folks. If nothing else, we should get a clarification for the next > revision. I agree with Mike On 3/2/07, Mike Kienenberger <[EMAIL PROTECTED]> wrote: > In this case, I'd strongly recommend that you run this by the spec > folks. If nothing else, we should get a clarification for the next > revision. > > On 3/1/07, Martin Marinschek < [EMAIL PROTECTED]> wrote: > > I didn't find anything in the spec. > > > > JavaDoc of getValue in UIOutput says: > > > > Gets the value of this UIComponent. First, consult the local value > > property of this component. If non-null return it. If non-null, see if > > we have a ValueBinding for the value property. If so, return the > > result of evaluating the property, otherwise return null. > > > > This description is obviously wrong (two times "If non-null.."), but > > if you correct this obvious mistake, it speaks against my solution. > > > > But then, reading the spec on a more general level it says: > > > > 3.1.4 Value Binding Expressions > > > > Properties and attributes of standard concrete component classes may be value > > binding enabled. This means that, rather than specifying a literal value as the > > parameter to a property or attribute setter, the caller instead associates a > > ValueBinding (see Section 5.3.3 "ValueBinding") whose getValue() method must > > be called (by the property getter) to return the actual property value > > to be returned > > if no value has been set via the corresponding property setter. If a property or > > attribute value has been set, that value must be returned by the property getter > > (shadowing any associated value binding expression for this property). > > > > and this would clearly indicate I'm on the right track. Properly > > reading this would mean we are wrong-doers for every component > > attribute of every component, even if the chance is rather small that > > the issue arises for normal attributes (it might definitely happen > > though). > > > > regards, > > > > Martin > > > > On 3/1/07, Mike Kienenberger < [EMAIL PROTECTED]> wrote: > > > What's the spec say about UIInput's getValue()? If it's silent, I'd > > > say your solution makes sense. > > > > > > > > > On 3/1/07, Martin Marinschek < [EMAIL PROTECTED]> wrote: > > > > Wanted to discuss a small thing with you: > > > > > > > > UIOutput currently has the following code: > > > > > > > > public Object getValue() > > > > { > > > > if (_value != null) return _value; > > > > ValueBinding vb = getValueBinding("value"); > > > > return vb != null ? (Object)vb.getValue(getFacesContext()) : null; > > > > } > > > > > > > > UIInput has the following code: > > > > > > > > public void setValue(Object value) > > > > { > > > > setLocalValueSet(true); > > > > super.setValue(value); > > > > } > > > > > > > > My problem (pseudo code): > > > > > > > > 1) user enters an empty string in an input-component: "" > > > > 2) conversion and validation phase: "" --> setValue(null); > > > > isLocalValueSet = true; setSubmittedValue(null); > > > > 3) validation fails in some component on the page --> update model > > > > phase is skipped > > > > 4) renderer calls getValue(); --> getValue() evaluates the > > > > value-binding, as the local-value is 'null', and I get the > > > > default-value of the bean shown again > > > > > > > > proposed solution: > > > > > > > > UIInput overwrites getValue of UIOutput: > > > > > > > > public Object getValue() > > > > { > > > > if (isLocalValueSet()) return _value; > > > > ValueBinding vb = getValueBinding("value"); > > > > return vb != null ? (Object)vb.getValue(getFacesContext()) : null; > > > > } > > > > > > > > everyone d'accord? > > > > > > > > regards, > > > > > > > > Martin > > > > > > > > -- > > > > > > > > http://www.irian.at > > > > > > > > Your JSF powerhouse - > > > > JSF Consulting, Development and > > > > Courses in English and German > > > > > > > > Professional Support for Apache MyFaces > > > > > > > > > > > > > -- > > > > http://www.irian.at > > > > Your JSF powerhouse - > > JSF Consulting, Development and > > Courses in English and German > > > > Professional Support for Apache MyFaces > > >
-- http://www.irian.at Your JSF powerhouse - JSF Consulting, Development and Courses in English and German Professional Support for Apache MyFaces