2010-08-10 109 views
0

我试图在其他选择框上建立一些依赖关系的选择框。我对Seam相当陌生 - 只是为了补充一点。这里是我的JSF - 用于测试目的,我想显示一个DataTableSeam - 具有依赖关系的ListSelectMenus

<f:facet name="header">Profil</f:facet> 

<a:form ajaxSubmit="true" reRender="testTable"> 
    <s:decorate id="techTypeField" template="layout/edit.xhtml"> 
     <ui:define name="label">Choose tech</ui:define> 
      <h:selectOneRadio id="techType" value="#{technologyType}" onchange="submit()"> 
       <s:selectItems value="#{technologyTypes}" var="elem" label="#{elem.name}" id="typeId"/> 
       <s:convertEntity/> 
      </h:selectOneRadio> 
    </s:decorate> 
</a:form> 

<div style="clear:both"/> 

<h:dataTable var="productLine" id="testTable" value="#{productLines}" rendered="#{productLines.rowCount > 0}"> 
    <h:column > 
     <f:facet name="header">pl</f:facet> 
     #{productLine.id} 
    </h:column> 
</h:dataTable> 

我支持bean

package de.ac.dmg.productfinder.workflow; 

import java.util.List; 

import javax.ejb.Remove; 
import javax.ejb.Stateful; 
import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 

import org.jboss.seam.annotations.Factory; 
import org.jboss.seam.annotations.In; 
import org.jboss.seam.annotations.Logger; 
import org.jboss.seam.annotations.Name; 
import org.jboss.seam.annotations.datamodel.DataModel; 
import org.jboss.seam.annotations.datamodel.DataModelSelection; 
import org.jboss.seam.international.StatusMessages; 
import org.jboss.seam.log.Log; 

import de.ac.entity.Machine; 
import de.ac.entity.ProductLine; 
import de.ac.entity.TechnologyType; 

@Stateful 
@Name("Profil") 

public class ProfilBean implements IProfil { 
@PersistenceContext 
private EntityManager entityManager; 

@Logger 
private Log log; 

@DataModel(value = "technologyTypes") 
private List<TechnologyType> technologyTypes; 

@DataModelSelection(value = "technologyTypes") 
private TechnologyType technologyType; 

@DataModel(value = "productLines") 
private List<ProductLine> productLines; 

@DataModel(value = "machines") 
List<Machine> machines; 

@In 
StatusMessages statusMessages; 

// add additional action methods 

@Factory("technologyTypes") 
public void loadTechTypes() { 
    technologyTypes = entityManager.createQuery("Select t from TechnologyType t").getResultList(); 
} 

@Factory("productLines") 
public void loadProductLinies() { 
    System.out.println(technologyType); 
    productLines = entityManager.createQuery("select p from ProductLine p where p.technologyType = :type ") 
      .setParameter("type", technologyType).getResultList(); 
} 

public void next() { 
    // implement your business logic here 
    log.info("Profil.next() action called with: #{Profil.value}"); 
    statusMessages.add("next #{Profil.value}"); 
} 

@Remove 
public void destroy() { 
} 

} 

我可以设置高科技型的时间 - 一个后,点击它不会刷新可悲的。我在这里做错了什么?

回答

1

选择“技术类型”时,您需要根据所选技术类型重新设置产品类型的操作。类似action=#{Profil.loadProductLines()}