# Nested Composite Components



## Sym (7. Nov 2011)

Hallo,

ich habe folgendes Problem. Ich habe zwei Composite Components, die ich ineinander verschachteln möchte. Für sich alleine funktionieren beide Komponenten, aber geschachtelt wird die jeweilige Action zwar aufgerufen, aber ein Neuzeichnen wird nicht durchgeführt.

Hat jemand eine Idee?

Diese Komponente zeichnet ein Label und ein Inputtextfield.

[XML]<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:a4j="http://richfaces.org/a4j"
		xmlns:rich="http://richfaces.org/rich" 
		xmlns:ts="http://larmic.de/ts"
		xmlns:tsc="http://java.sun.com/jsf/composite/components"
		xmlns:composite="http://java.sun.com/jsf/composite"
		xmlns:f="http://java.sun.com/jsf/core">

		<h:body>
			<composite:interface>
				<composite:attribute name="labelText" required="true" />
				<composite:attribute name="divstyle" required="false" />
				<composite:attribute name="required" required="false" />
				<composite:attribute name="value" required="true" />
				<composite:editableValueHolder name="inputText"
					targets="#{cc.clientId}_inputText" />
				<composite:attribute name="id"></composite:attribute>
				<composite:attribute name="rendered"></composite:attribute>
			</composite:interface>

			<composite:implementation>
				<div class="#{empty cc.attrs.divstyle ? 'edit' : cc.attrs.divstyle}">
					<hutputLabel value="#{cc.attrs.labelText}"
						for="#{cc.clientId}_inputText" />

					<h:inputText id="#{cc.clientId}_inputText"
						value="#{cc.attrs.value}" required="#{cc.attrs.required}">
						<composite:insertChildren />
					</h:inputText>

					<ts:errorTooltip
						target="#{cc.clientId}_inputText">
						<h:message for="#{cc.clientId}_inputText" />
					</ts:errorTooltip>
				</div>

				<div class="clearFloats" />
			</composite:implementation>
		</h:body>
</html>[/XML]

Diese Komponente erwartet eine spezielle Klasse und führt bei Buttonklicks Neuzeichnungen aus.

[XML]<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:a4j="http://richfaces.org/a4j" 
	  xmlns:rich="http://richfaces.org/rich"
	  xmlns:ts="http://larmic.de/ts"
	  xmlns:tsc="http://java.sun.com/jsf/composite/components"
	  xmlns:composite="http://java.sun.com/jsf/composite"
	  xmlns:f="http://java.sun.com/jsf/core">

	<h:body>
		<composite:interface>
			<composite:attribute name="editPanelBean" type="de.larmic.ts.web.application.EditPanelBean" required="true"/>
		</composite:interface>

		<composite:implementation>
			<a4jutputPanel id="ruleSetPanel">
				<a4j:region id="ruleSetRegion">

					<a4j:commandButton id="cancelBtn" execute="@this" value="Abbrechen" action="#{cc.attrs.editPanelBean.cancelEdit()}"
							styleClass="cancel cancelBtn button" render="form" ajaxSingle="true"
							rendered="#{cc.attrs.editPanelBean.editMode and cc.attrs.editPanelBean.editAllowed}">
						<ts:defaultCancelAction />
					</a4j:commandButton>

					<a4j:commandButton execute="@this" 
									   value="Neu" 
									   action="#{cc.attrs.editPanelBean.createNew()}" 
									   styleClass="accept acceptBtn button" 
									   render="ruleSetPanel" 
									   ajaxSingle="true" 
									   rendered="#{cc.attrs.editPanelBean.newAllowed and not cc.attrs.editPanelBean.editMode}"/>

					<a4j:commandButton id="saveBtn" execute="@region" value="Speichern" action="#{cc.attrs.editPanelBean.save()}"
							styleClass="accept acceptBtn button" render="form" 
							rendered="#{cc.attrs.editPanelBean.editMode and cc.attrs.editPanelBean.editAllowed}">
						<ts:defaultAction />
					</a4j:commandButton>

					<a4j:commandButton id="editBtn" execute="@region" value="Bearbeiten" action="#{cc.attrs.editPanelBean.beginEdit()}"
							styleClass="accept acceptBtn button" render="ruleSetPanel" 
							rendered="#{not cc.attrs.editPanelBean.editMode and cc.attrs.editPanelBean.editAllowed}" />

					<div class="clearFloats" />

					<composite:insertChildren />

				</a4j:region>
			</a4jutputPanel>
		</composite:implementation>
	</h:body>  
</html>[/XML]

Da beide Komponenten für sich alleine funktionieren (auch mit Children), weiß ich gerade nicht weiter. Hat jemand einen Tip oder Link?

Gruß und Dank Sym


----------



## Sym (7. Nov 2011)

Wenn ich

[xml]<h:inputText id="#{cc.clientId}_inputText"
	value="#{cc.attrs.value}" required="#{cc.attrs.required}">
	<composite:insertChildren />
</h:inputText>[/xml]

auskommentiere, klappt es. Wenn ich nur insertChildren auskommentiere, dann nicht.


----------



## Sym (7. Nov 2011)

Das Problem hat sich gelöst. Es lag an der Id des InputTextFields.


----------

