issues persisting h:inputText placed in an a4j:outputPanel
mafym Dec 4, 2009 5:44 PMHi!
I have the following issue:
I can not save the content of the items placed under a4j:outputPanel.
Scenario:
In the following sample, by default, the description is hidden.
1. show the testOptionalDetails section unchecking the selectBooleanCheckbox
2. populate the name and description fields
3. press the createdTest
button
Result:
only the name value is persisted while the description value is always null in the database.
What is wrong in the following code? I need to persist the description also.
Thank you!
Environment:
RichFaces: 3.3.2.SR1 Seam: 2.2.0.GA JBoss: 5.1.0.GA
test.xhtml
<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.org/rich" xmlns:a="http://richfaces.org/a4j" template="/layout/template.xhtml"> <ui:define name="body"> <a:form id="testForm" styleClass="edit"> <rich:panel id="testPanel"> <f:facet name="header"> <h:outputText value="#{messages.test}"/> </f:facet> <h:panelGrid columns="2"> <h:outputText>#{messages.show_only_name}</h:outputText> <h:selectBooleanCheckbox value="#{testAction.showOnlyName}" id="showOnlyNameCheck" immediate="true"> <a:support id="checkboxSupport" event="onclick" ajaxSingle="true" reRender="testOptionalDetails"/> </h:selectBooleanCheckbox> </h:panelGrid> <rich:panel id="testDetails"> <f:facet name="header">#{messages.test_details}</f:facet> <s:decorate id="testNameField" template="/layout/edit.xhtml"> <ui:define name="label">#{messages.test_name}</ui:define> <h:inputText id="testName" required="true" value="#{testAction.test.name}"> <a:support event="onblur" reRender="testNameField" bypassUpdates="true" ajaxSingle="true"/> </h:inputText> </s:decorate> <a:outputPanel id="testOptionalDetails"> <s:decorate id="testDescriptionField" template="/layout/edit.xhtml" rendered="#{not testAction.showOnlyName}"> <ui:define name="label">#{messages.test_description}</ui:define> <h:inputText id="testDescription" value="#{testAction.test.description}"/> </s:decorate> </a:outputPanel> <div style="clear: both"><span class="required">*</span> #{messages.required_fields}</div> </rich:panel> <s:div> <a:commandButton type="button" id="createTestButton" value="#{messages.createTest}" action="#{testAction.createTest}"/> </s:div> </rich:panel> </a:form> </ui:define> </ui:composition>
Test.java
@Entity @SequenceGenerator(name = "SEQ", sequenceName = "SQ_TEST", initialValue = 500, allocationSize = 1) @Table(name = "TEST", schema = "TEST") public class Test implements Serializable { private long id; private String name; private String description; @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ") @Column(name = "ID", unique = true, nullable = false, precision = 38, scale = 0) @NotNull public long getId() { return id; } public void setId(long id) { this.id = id; } @Column(name = "NAME", nullable = false) @NotNull public String getName() { return name; } public void setName(String name) { this.name = name; } @Column(name = "DESCRIPTION") public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } }
TestAction.java
@Name("testAction") @Scope(ScopeType.CONVERSATION) @AutoCreate public class TestAction implements Serializable { @In EntityManager entityManager; private Test test; private boolean showOnlyName = true; @Transactional public void createTest() { entityManager.persist(test); } public Test getTest() { if (test == null) { test = new Test(); } return test; } public void setTest(Test test) { this.test = test; } public boolean isShowOnlyName() { return showOnlyName; } public void setShowOnlyName(boolean showOnlyName) { this.showOnlyName = showOnlyName; } }