Problem with Seam components in dynamic forms
blumenro Jun 12, 2008 8:34 PMAll,
I'm about to create a facelet for dynamic forms. I have the form elements in a list of one Seam component and loop through it to render the form. On the other side I want to store the users' input in another Seam component that is then also used to send out an email.
This is a draft of the code:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:s="http://jboss.com/products/seam/taglib"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rich="http://richfaces.ajax4jsf.org/rich"
template="layout/template.xhtml">
<ui:define name="body">
<!-- <h:outputText value="#{contentHome.content.path}"></h:outputText> -->
<div id="hd_working_area">
<div id="hd_content_area">
<div id="hd_main_column">
<h:form>
<ui:repeat value="#{contentHome.contentTree.children}" var="_element">
<s:div rendered="#{_element.name eq 'FormHeading'}">
<h1><h:outputText style="#{(_element.attributes['Bold'] eq 'true') ? 'font-weight: bold' : ''}" value="#{_element.attributes['HeadingParagraph']}"></h:outputText></h1><br/>
</s:div>
<s:div rendered="#{_element.name eq 'UserEmail'}">
<h:outputText style="#{(_element.attributes['Bold'] eq 'true') ? 'font-weight: bold' : ''}" value="#{_element.attributes['FieldLabel']}" escape="false"></h:outputText>
<s:span style="#{(_element.attributes['Bold'] eq 'true') ? 'font-weight: bold' : ''}" rendered="#{_element.attributes['Required'] eq 'true'}">
*
</s:span>
<h:inputText id="email" value="#{formEmail.emailAddress}" required="#{_element.attributes['Required']}"></h:inputText>
</s:div>
</ui:repeat>
<div class="buttonBox">
<h:commandButton id="send" value="Send" action="#{formEmail.send}"/>
 
<s:button id="cancel" value="Cancel" view="/home.xhtml"/>
</div>
</h:form>
</div>
</div>
</div>
</ui:define>
</ui:composition>The problem is that the property formEmail.emailAddress is not filled when I submit the form. However, when I hardcode the form (without rendering it dynamically based on the other Seam component), it works. So my question is whether there is a basic issue with having 2 Seam components in a facelet, one for rendering and one for storing the input.
Regards,
Christian