<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html; charset=ISO-8859-1"
 http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
On 10/8/09 5:51 PM, Martin Marinschek wrote:
<blockquote
 cite="mid:5a99335f0910081751r783f477fs3210029180f56735@mail.gmail.com"
 type="cite">
  <pre wrap="">I know I am way late with my post, but I (sure) also agree with Andy.
Can we take this up as an issue against the implementation, and
eventually a clarification to the spec?

Ryan, what do you think?
  </pre>
</blockquote>
We've made the necessary changes to Mojarra to support Andy's
suggestion and have<br>
added a line item to the MR change log [1] (see C034).<br>
<br>
[1] <a class="moz-txt-link-freetext" href="http://wiki.java.net/bin/view/Projects/Jsf2MR1ChangeLog">http://wiki.java.net/bin/view/Projects/Jsf2MR1ChangeLog</a>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<br>
<br>
<br>
<blockquote
 cite="mid:5a99335f0910081751r783f477fs3210029180f56735@mail.gmail.com"
 type="cite">
  <pre wrap="">
Leonardo, can you do the same in MyFaces?

regards,

Martin

On Thu, Sep 17, 2009 at 6:12 PM, Kito Mann <a class="moz-txt-link-rfc2396E" href="mailto:kito.mann@virtua.com">&lt;kito.mann@virtua.com&gt;</a> wrote:
  </pre>
  <blockquote type="cite">
    <pre wrap="">+1
---
Kito D. Mann -- Author, JavaServer Faces in Action
<a class="moz-txt-link-freetext" href="http://twitter.com/kito99">http://twitter.com/kito99</a> &nbsp;<a class="moz-txt-link-freetext" href="http://twitter.com/jsfcentral">http://twitter.com/jsfcentral</a>
JSF 2 Seminar Oct 6th: <a class="moz-txt-link-freetext" href="http://www.regonline.com/jsf2seminar">http://www.regonline.com/jsf2seminar</a>
JSF Summit Conference Dec 1st-4th in Orlando: <a class="moz-txt-link-freetext" href="http://www.jsfsummit.com">http://www.jsfsummit.com</a>
<a class="moz-txt-link-freetext" href="http://www.JSFCentral.com">http://www.JSFCentral.com</a> - JavaServer Faces FAQ, news, and info
+1 203-404-4848 x3


On Tue, Sep 15, 2009 at 6:34 PM, Andy Schwartz <a class="moz-txt-link-rfc2396E" href="mailto:andy.schwartz@oracle.com">&lt;andy.schwartz@oracle.com&gt;</a>
wrote:
    </pre>
    <blockquote type="cite">
      <pre wrap="">
Ryan, All -

Breaking this topic off into a separate thread, though I am impressed with
the length of the "&lt;h:dataTable&gt; binding vs. ui:repeat" thread. :-)

Ryan Lubke wrote:
      </pre>
      <blockquote type="cite">
        <pre wrap="">
On 9/7/09 6:06 PM, Andy Schwartz wrote:
        </pre>
        <blockquote type="cite">
          <pre wrap="">
Thanks Lincoln. &nbsp;I haven't had time to debug this, but I have a theory
about what might be happening. &nbsp;In your sample:

          </pre>
          <blockquote type="cite">
            <pre wrap="">&lt;a:editText value="#{cc.attrs.task.text}"
rendered="#{!cc.attrs.disabled}"&gt;
*&lt;f:actionListener for="submit"
action="#{taskController.saveTaskAjax(cc.attrs.story, cc.attrs.task)}" /&gt; *
&lt;/a:editText&gt;
            </pre>
          </blockquote>
          <pre wrap="">
We expect "cc" to resolve to the containing composite component (ie. to
the &lt;socialpm:taskBlock&gt; component). &nbsp;I wouldn't be surprised if what is
actually happening is that "cc" is &nbsp;being resolved to the &lt;a:editText&gt;
composite component instead.
          </pre>
        </blockquote>
        <pre wrap="">
Yep, that's what is happening.
        </pre>
        <blockquote type="cite">
          <pre wrap="">
One reason why I suspect this might be happening is that I know that
Ryan has investigated/resolved similar problems not too long ago.
          </pre>
        </blockquote>
        <pre wrap="">
The problem we resolved was the passing of #{cc.attrs} attributes between
nested composite components.
For this case, the spec recommends using cc.parent.attrs.story and
cc.parent.attrs.task, where parent resolves
to the nearest composite component parent of the current composite
component.
        </pre>
      </blockquote>
      <pre wrap="">
I am concerned about this behavior. &nbsp;It isn't clear to me whether the spec
is explicit about this behavior, or whether this is something that happens
to fall out of the implementation. &nbsp;Either way, the current behavior seems
counterintuitive to me, and, well... wrong.

My feeling is that when a composite component author uses a #{cc}
expression in a composite component implementation, eg:

&nbsp;&lt;composite:implementation&gt;
&nbsp; &lt;h:outputText value="#{cc.attrs.value}"&gt;
&nbsp;&lt;/composite:implementation&gt;

The correct behavior (the behavior expected by the composite component
author) is to resolve the #{cc} expression relative to where the expression
is defined - not relative to where it happens to end up in the component
tree. &nbsp;So, for example, I believe that these three uses of the
#{cc.attrs.value} expression should all evaluate to the same value:

&nbsp;&lt;composite:implementation&gt;

&nbsp; &lt;!-- 1. Expression directly in the implementation --&gt;
&nbsp; &lt;h:outputText value="#{cc.attrs.value}"&gt;

&nbsp; &lt;!-- 2. Expression in non-composite component facet --&gt;
&nbsp; &lt;bar:someJavaComposite&gt;
&nbsp; &nbsp; &lt;f:facet name="someFacet"&gt;
&nbsp; &nbsp; &nbsp; &lt;h:outputText value="#{cc.attrs.value}"&gt;
&nbsp; &nbsp; &lt;/f:facet&gt;
&nbsp; &lt;/bar:someJavaComponent&gt;

&nbsp; &lt;!-- 3. Expression in composite component facet --&gt;
&nbsp; &lt;foo:someCompositeComponent&gt;
&nbsp; &nbsp; &lt;f:facet name="someFacet"&gt;
&nbsp; &nbsp; &nbsp; &lt;h:outputText value="#{cc.attrs.value}"&gt;
&nbsp; &nbsp; &lt;/f:facet&gt;
&nbsp; &lt;/foo:someCompositeComponent&gt;

&nbsp;&lt;/composite:implementation&gt;

The fact that the #{cc.attrs.value} expression evaluates the same in cases
#1 and #2 but not in case #3 is non-obvious and is going to be confusing for
our users. &nbsp;The fact that Lincoln and I were confused about this is a good
indication that others will be as well.

I am not happy with the work around of using #cc.parent.attrs, since this
means that:

1. The user must recognize that the component in question is a composite
component and code the expression differently. &nbsp;While at the moment it is
fairly easy to determine whether a particular component is a composite or
not (by looking at the namespace declaration), I think that we should strive
to blur these lines rather than reinforce them. &nbsp;For example, I would like
to see the ability to define a single tag library that consists of both
composite and non-composite components, making the choice of component
implementation more transparent to the user.

2. Once the user has coded the expression in a composite
component-specific way, this introduces a dependency on the fact that the
component in question is a composite component - a dependency that shouldn't
be necessary for this particular case. &nbsp;Such dependencies inhibit
flexibility. &nbsp;If in the future the provider of the composite component
decides to switch to a Java-based component, this will break any code (or EL
expression) that assumes that the component is a composite. &nbsp;We should keep
such dependencies to a minimum.

3. This also introduces a subtle dependency on the composite component's
implementation. &nbsp;What if the composite component implementation passes the
expression along to yet another nested composite component? &nbsp;Does the user
now need to specify an expression that pops out multiple levels of parents?

While it is certainly trickier to deal with from an implementation
perspective, I believe that it is very important that we re-consider the
current behavior and consider spec'ing that #{cc} expressions always resolve
relative to the context in which they are defined. &nbsp;I feel that the current
behavior violates the principle of least surprise (both Lincoln and I were
surprised) and also breaks encapsulation (ie. introduces
implementation-specific dependencies).

Leaving aside questions of how we might implement my preferred behavior
for the moment... &nbsp;Does anyone have comments on which behavior makes sense
from a spec/end user perspective?

Andy

      </pre>
    </blockquote>
    <pre wrap="">

    </pre>
  </blockquote>
  <pre wrap="">


  </pre>
</blockquote>
<br>
</body>
</html>