You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Kito D. Mann (JIRA)" <de...@myfaces.apache.org> on 2011/08/18 01:20:27 UTC

[jira] [Commented] (MYFACES-3283) #{cc.attr} attributes fail when a child component is accessed outside of the composite component (i.e. in action listeners or other events)

    [ https://issues.apache.org/jira/browse/MYFACES-3283?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13086672#comment-13086672 ] 

Kito D. Mann commented on MYFACES-3283:
---------------------------------------

There are lots of things one *can* do. However, this is typical application developer behavior, and you should be able to reference any component from an action listener (or, during a PostValidate component event listener, which is where this problem was discovered) and expect its properties to resolve normally. 

You need to prove that this is valid behavior with respect to the spec in order to mark it as invalid. Note that the Mojarra folks have not marked it as invalid.

> #{cc.attr} attributes fail when a child component is accessed outside of the composite component (i.e. in action listeners or other events)
> -------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: MYFACES-3283
>                 URL: https://issues.apache.org/jira/browse/MYFACES-3283
>             Project: MyFaces Core
>          Issue Type: Bug
>          Components: General
>    Affects Versions: 2.0.7
>         Environment: Mac OS 10.6, Tomcat 7
>            Reporter: Kito D. Mann
>         Attachments: myfaces_cc_issue.war
>
>
> If you reference a property of child component anywhere outside of the composite's context (i.e. in an action method, a component system event listener, etc.), the property will not be evaluated properly if the expression is a composite component attribute (i.e. "#{cc.attrs.property}"). This is because the EL evaluation code can't find the parent composite component.
> For example, consider the composite component:
> <?xml version="1.0"?>
> <html xmlns="http://www.w3.org/1999/xhtml"
> 	xmlns:h="http://java.sun.com/jsf/html"
> 	xmlns:composite="http://java.sun.com/jsf/composite">
> <composite:interface>
> 	<composite:attribute name="label" />
> 	<composite:attribute name="value" required="true" />
> </composite:interface>
> <composite:implementation>
> 	<h:outputLabel for="input" value="#{cc.attrs.label}" />
> 	<h:inputText id="input" value="#{cc.attrs.value}" />
> </composite:implementation>
> </html>
> The calling page:
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
> <html xmlns="http://www.w3.org/1999/xhtml"
> 	xmlns:ui="http://java.sun.com/jsf/facelets"
> 	xmlns:h="http://java.sun.com/jsf/html"
> 	xmlns:f="http://java.sun.com/jsf/core"
> 	xmlns:ez="http://java.sun.com/jsf/composite/demo">
> <h:head></h:head>
> <h:body>
> 	<h:form id="form">
> 		<h:messages />
> 		<ez:input id="composite" label="Enter something:"
> 			value="#{testBean.value}" />
> 		<h:commandButton value="Submit" action="#{testBean.testCcAttribute}" />
> 	</h:form>
> </h:body>
> </html>
> Here's testBean.testCcAttribute():
> 	public String testCcAttribute() {
> 		HtmlInputText input = (HtmlInputText)FacesContext.getCurrentInstance().getViewRoot().findComponent("form:composite:input");
> 		UIComponent composite = FacesContext.getCurrentInstance().getViewRoot().findComponent("form:composite");
> 		String message = "Input control label attribute is: " + input.getLabel() + "; Composite label attribute is: " + composite.getAttributes().get("label");
> 		display(message);
> 		return null;
> 	}
> This action method generates the following message:
> Input control label attribute is: null; Composite label attribute is: Enter something:
> ---
> Full example WAR attached.
> Note this is the same as the following issue with Mojarra: http://java.net/jira/browse/JAVASERVERFACES-2009.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira