[jboss-user] [JBoss Seam] - Scopes problem
amitev
do-not-reply at jboss.com
Tue Jul 10 04:49:58 EDT 2007
Hi all i have the following scenario - page for creating a new project that has a few input fields for project info and data table with components related to that project. Here is the page code:
<h:form>
| <table>
| <tr>
| <td colspan="3">
| <h:messages layout="table" globalOnly="true" styleClass="message" id="globalMessages" />
| </td>
| </tr>
|
| <tr>
| <td>
| #{projMsg.name}:
| </td>
| <td>
| <h:inputText id="prj_name" value="#{project.name}" required="true"> </h:inputText>
| </td>
| </tr>
|
| <tr>
| <td colspan="2" align="center">
| <h:message styleClass="errorMessage" for="prj_name" />
| </td>
| </tr>
|
| <tr>
| <td>
| #{projMsg.url}:
| </td>
| <td>
| <h:inputText id="prj_url" value="#{project.url}"> </h:inputText>
| </td>
| </tr>
|
| <tr>
| <td>
| #{projMsg.description}
| </td>
| <td>
| <h:inputTextarea rows="4" cols="20" id="prj_desc" value="#{project.description}" />
| </td>
| <td>
| <h:message for="prj_desc" />
| </td>
| </tr>
|
| <tr>
| <td>
| </td>
| <td>
| <h:commandButton value="#{otherMsg.create}" action="#{projectAction.createProject}" />
| </td>
| <td>
| </td>
| </tr>
|
| <tr>
| <td colspan="2">
| <rich:dataTable value="#{project.componentCollection}" var="comp">
| <f:facet name="header">
| <rich:columnGroup>
| <rich:column colspan="2">
| #{projMsg.components}
| </rich:column>
| </rich:columnGroup>
| </f:facet>
|
| <rich:column>
| #{comp.name}
| </rich:column>
| <rich:column>
| #{fn:length(comp.name)}
| </rich:column>
|
| <f:facet name="footer">
| <rich:columnGroup>
| <rich:column>
| <h:inputText value="#{component.name}"></h:inputText>
| </rich:column>
| <rich:column>
| <h:commandButton action="#{projectAction.addComponent}" value="Add" />
| </rich:column>
| </rich:columnGroup>
| </f:facet>
| </rich:dataTable>
| </td>
| </tr>
| </table>
| </h:form>
Here is the code of the backing bean:
| @Stateful
| @Name("projectAction")
| public class ProjectActionBean implements com.amitev.bts.ejb.ProjectActionLocal {
|
| @PersistenceContext
| EntityManager em;
|
| @In
| private User user;
|
| @In @Out
| private Project project;
|
| @In @Out
| private Component component;
|
| @In
| private FacesMessages facesMessages;
|
| @Restrict("#{identity.loggedIn}")
| public String createProject() {
| List results = em.createQuery("from Project pr where pr.name = #{projectAction.project.name}").getResultList();
| if ( results.size()==0 ) {
| project.setOwnerId(user);
| em.persist(project);
| } else {
| facesMessages.addToControlFromResourceBundle("prj_name","project_exists");
| }
| return null;
| }
|
| @Restrict("#{identity.loggedIn}")
| public void addComponent() {
| String componentName = component.getName().trim().toLowerCase();
| boolean contains = false;
| System.out.println(project.getComponentCollection().size());
| for (Component comp: project.getComponentCollection()) {
| System.out.println(comp.getName());
| if (componentName.equalsIgnoreCase(comp.getName())) {
| contains = true;
| }
| }
|
| if (!contains) {
| project.getComponentCollection().add(component);
| component = new Component();
| }
|
| }
|
| @Destroy @Remove
| public void destroy() {}
|
| }
|
When i add a component the page is redisplayed and the component is shown in the data table. But when i try to add a new component and press the back button i see that the component collection is empty (probably new Project instance is injected). What's the best way to solve this problem with seam?
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4062300#4062300
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4062300
More information about the jboss-user
mailing list