6 Replies Latest reply on Aug 5, 2006 3:23 AM by recycle_bin

    DataModelSelection Problem

    recycle_bin

      I am using SFSB and @DataModel to display a list of record. But when i press "edit" button to select a record to edit with @DataModelSelection. It always select first record in the list, not selected one. Does anyone know why?

       @DataModel
       private List<Record> entityList;
      
       @DataModelSelection
       private Record selectedEntity;
      


      In the JSP's DataTable

       <h:column>
       <h:commandButton value="Edit" action="#recordBean.select}">
       </h:commandButton>
       </h:column>
      
      


        • 1. Re: DataModelSelection Problem
          pmuir

          You seem to be missing a { in your JSF

          • 2. Re: DataModelSelection Problem
            recycle_bin

            it is typo error but it also doesn't work even correcting it. any other thing i missed?

            • 3. Re: DataModelSelection Problem
              bfo81

              I think @DataModelSelection only works when you use s:link ;).

              • 4. Re: DataModelSelection Problem
                pmuir

                No, it quite definitely works without s:link

                • 5. Re: DataModelSelection Problem
                  german.delacruz

                   

                  "bfo81" wrote:
                  I think @DataModelSelection only works when you use s:link ;).


                  For me, It didn't work with s:link. But I make it work with commandButton... see

                  http://www.jboss.com/index.html?module=bb&op=viewtopic&t=88100

                  anyway, What about your entityList factory?. Can you post your entire bean, and your page? Perhaps, I can help you.

                  Regards.

                  • 6. Re: DataModelSelection Problem
                    recycle_bin

                    Thanks. Below is my source code:

                    SysConfig2Bean:

                    package com.abc.test.session;
                    
                    import static javax.ejb.TransactionAttributeType.NOT_SUPPORTED;
                    
                    import javax.ejb.Remove;
                    import javax.ejb.Stateful;
                    import javax.ejb.TransactionAttribute;
                    import javax.interceptor.Interceptors;
                    import javax.persistence.EntityManager;
                    import javax.persistence.PersistenceContext;
                    
                    import org.jboss.seam.ScopeType;
                    import org.jboss.seam.annotations.Destroy;
                    import org.jboss.seam.annotations.Name;
                    import org.jboss.seam.annotations.Scope;
                    import org.jboss.seam.ejb.SeamInterceptor;
                    
                    import com.abc.core.entity.SysConfig;
                    
                    @Stateful
                    @Name("com.abc.test.session.sysConfig2Bean")
                    @Interceptors(SeamInterceptor.class)
                    public class SysConfig2Bean implements SysConfig2Local {
                     @PersistenceContext
                     EntityManager em;
                    
                     private SysConfig instance;
                     private boolean isNew=true;
                    
                     @TransactionAttribute(NOT_SUPPORTED)
                     public SysConfig getInstance() {
                     return instance;
                     }
                    
                     public void setInstance(SysConfig instance) {
                     this.instance = instance;
                     }
                    
                     @TransactionAttribute(NOT_SUPPORTED)
                     public boolean isNew() {
                     return isNew;
                     }
                    
                     public void setNew(boolean isNew) {
                     this.isNew = isNew;
                     }
                    
                     @Remove
                     @Destroy
                     public void remove(){
                    
                     }
                    }
                    


                    SysConfig2FinderBean
                    package com.abc.test.session;
                    
                    import java.util.List;
                    
                    import javax.ejb.Remove;
                    import javax.ejb.Stateful;
                    import javax.interceptor.Interceptors;
                    import javax.persistence.EntityManager;
                    import javax.persistence.PersistenceContext;
                    
                    import org.jboss.seam.ScopeType;
                    import org.jboss.seam.annotations.Destroy;
                    import org.jboss.seam.annotations.In;
                    import org.jboss.seam.annotations.Name;
                    import org.jboss.seam.annotations.Scope;
                    import org.jboss.seam.annotations.datamodel.DataModel;
                    import org.jboss.seam.annotations.datamodel.DataModelSelection;
                    import org.jboss.seam.ejb.SeamInterceptor;
                    
                    import com.abc.core.entity.SysConfig;
                    
                    @Stateful
                    @Name("com.abc.test.session.sysConfig2FinderBean")
                    @Scope(ScopeType.SESSION)
                    @Interceptors(SeamInterceptor.class)
                    public class SysConfig2FinderBean implements SysConfig2FinderLocal {
                     @PersistenceContext
                     private EntityManager em;
                    
                     @DataModel
                     private List<SysConfig> entityList;
                    
                     @DataModelSelection
                     private SysConfig selectedEntity;
                    
                     public SysConfig getSelectedEntity(){
                     return em.merge(selectedEntity);
                     }
                    
                     public List<SysConfig> getEntityList() {
                     entityList = query();
                     return entityList;
                     }
                    
                     public void setEntityList(List<SysConfig> entityList) {
                     this.entityList = entityList;
                     }
                    
                     private List<SysConfig> query(){
                     return em.createQuery("from SysConfig").getResultList();
                     }
                    
                     @Destroy
                     @Remove
                     public void remove(){
                    
                     }
                    }
                    
                    



                    SysConfig2SelectorBean


                    package com.abc.test.session;
                    
                    import javax.ejb.Stateless;
                    import javax.interceptor.Interceptors;
                    
                    import org.jboss.seam.annotations.Begin;
                    import org.jboss.seam.annotations.In;
                    import org.jboss.seam.annotations.Name;
                    import org.jboss.seam.ejb.SeamInterceptor;
                    
                    @Stateless
                    @Name("com.abc.test.session.sysConfig2SelectorBean")
                    @Interceptors(SeamInterceptor.class)
                    public class SysConfig2SelectorBean implements SysConfig2SelectorLocal {
                     @In(create = true, value="com.abc.test.session.sysConfig2Bean")
                     private transient SysConfig2Local sysConfig2Bean;
                    
                     @In(create = true, value="com.abc.test.session.sysConfig2FinderBean")
                     private transient SysConfig2FinderLocal sysConfig2Finder;
                    
                     @Begin
                     public String select() {
                     sysConfig2Bean.setInstance(sysConfig2Finder.getSelectedEntity());
                     sysConfig2Bean.setNew(false);
                     return "sysConfigEdit";
                     }
                    }
                    
                    


                    sysConfigList.jsf

                    <%@ page contentType="text/html; charset=UTF-8" %>
                    <%@ page pageEncoding="UTF-8" %>
                    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
                    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
                    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
                    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
                    <head>
                     <title>Testing</title>
                     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
                    
                     <meta http-equiv="Pragma" content="no-cache">
                     <meta http-equiv="expires" content="0" >
                     <style type="text/css" media="all">
                     @import "/jsp/css/default.css";
                     </style>
                    </head>
                    <f:view>
                    <f:loadBundle basename="lookup" var="lookupMsg"/>
                    <body>
                     <table width="100%" height="100%">
                     <tr>
                     <td>
                     <!-- Content Start Here -->
                     <div class="rvgResults">
                     <h:form id="sysConfigForm">
                     <h:dataTable value="#{com$abc$test$session$sysConfig2FinderBean.entityList}" var="sysConfig"
                     rowClasses="rvgRowOne,rvgRowTwo" headerClass="rvgOrder" width="100%">
                     <h:column>
                     <f:facet name="header">
                     <h:outputText value="Section" />
                     </f:facet>
                     <h:outputText value="#{sysConfig.section}"/>
                     </h:column>
                     <h:column>
                     <f:facet name="header">
                     <h:outputText value="Name" />
                     </f:facet>
                     <h:outputText value="#{sysConfig.name}"/>
                     </h:column>
                     <h:column>
                     <f:facet name="header">
                     <h:outputText value="Config Group" />
                     </f:facet>
                     <h:outputText value="#{sysConfig.configGroup}"/>
                     </h:column>
                     <h:column>
                     <f:facet name="header">
                     <h:outputText value="Value" />
                     </f:facet>
                     <h:outputText value="#{sysConfig.value}"/>
                     </h:column>
                     <h:column>
                     <f:facet name="header">
                     <h:outputText value="Remarks" />
                     </f:facet>
                     <h:outputText value="#{sysConfig.remarks}"/>
                     </h:column>
                     <h:column>
                     <f:facet name="header">
                     <h:outputText value="Edit" />
                     </f:facet>
                     <h:commandButton value="Edit" action="#{com$abc$test$session$sysConfig2SelectorBean.select}">
                     </h:commandButton>
                     </h:column>
                     </h:dataTable>
                     </h:form>
                     </div>
                     <!-- Content End Here -->
                     </td>
                     </tr>
                     </table>
                    
                    </body>
                    </f:view>
                    </html>
                    
                    


                    sysConfigEdit.jsf
                    <%@ page contentType="text/html; charset=UTF-8" %>
                    <%@ page pageEncoding="UTF-8" %>
                    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
                    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
                    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
                    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
                    <head>
                     <title>Testing</title>
                     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
                    
                     <meta http-equiv="Pragma" content="no-cache">
                     <meta http-equiv="expires" content="0" >
                     <style type="text/css" media="all">
                     @import "/jsp/css/default.css";
                     </style>
                    </head>
                    <f:view>
                    <f:loadBundle basename="sysconfig" var="sysconfigMsg"/>
                    <body>
                    <table width="100%" height="100%">
                     <tr>
                     <td>
                     <h:form id="sysConfigForm">
                     <div class="rvgFind">
                     <fieldset class="rvgFieldSet">
                     <legend>
                     <h:outputText value="#{sysconfigMsg.sysconfig_add}" rendered="#{com$abc$test$session$sysConfig2Bean.new}" />
                     <h:outputText value="#{sysconfigMsg.sysconfig_update}" rendered="#{!com$abc$test$session$sysConfig2Bean.new}" />
                     </legend>
                    
                     <span class="rvgInputs">
                     <span class="rvgMessage"><h:messages globalOnly="true"/></span>
                     <h:outputLabel value="#{sysconfigMsg.sysconfig_section}" for="section">
                     <h:inputText value="#{com$abc$test$session$sysConfig2Bean.instance.section}" id="section"/>
                     <span class="rvgMessage"><h:message for="section"/></span>
                     </h:outputLabel>
                     <h:outputLabel value="#{sysconfigMsg.sysconfig_name}" for="name">
                     <h:inputText value="#{com$abc$test$session$sysConfig2Bean.instance.name}" id="name"/>
                     <span class="rvgMessage"><h:message for="name"/></span>
                     </h:outputLabel>
                     <h:outputLabel value="#{sysconfigMsg.sysconfig_value}" for="value">
                     <h:inputText value="#{com$abc$test$session$sysConfig2Bean.instance.value}" id="value"/>
                     <span class="rvgMessage"><h:message for="value"/></span>
                     </h:outputLabel>
                     <h:outputLabel value="#{sysconfigMsg.sysconfig_configGroup}" for="configGroup">
                     <h:inputText value="#{com$abc$test$session$sysConfig2Bean.instance.configGroup}" id="configGroup"/>
                     <span class="rvgMessage"><h:message for="configGroup"/></span>
                     </h:outputLabel>
                     <h:outputLabel value="#{sysconfigMsg.sysconfig_remarks}" for="remarks">
                     <h:inputText value="#{com$abc$test$session$sysConfig2Bean.instance.remarks}" id="remarks"/>
                     <span class="rvgMessage"><h:message for="remarks"/></span>
                     </h:outputLabel>
                     </span>
                    
                     <span class="rvgActions">
                     <h:commandButton type="submit" value="#{sysconfigMsg.sysconfig_add}" action="#{com$abc$test$session$sysConfig2Bean.create}" rendered="#{com$abc$test$session$sysConfig2Bean.new}"/>
                     <h:commandButton type="submit" value="#{sysconfigMsg.sysconfig_update}" action="#{com$abc$test$session$sysConfig2Bean.update}" rendered="#{!com$abc$test$session$sysConfig2Bean.new}"/>
                     </span>
                    
                     </fieldset>
                     </div>
                     </h:form>
                     </td>
                     </tr>
                    </table>
                    </body>
                    </f:view>
                    </html>