myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kito D. Mann (JIRA)" <...@myfaces.apache.org>
Subject [jira] [Created] (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)
Date Wed, 17 Aug 2011 23:04:27 GMT
#{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


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

        

Mime
View raw message