2010-08-10 8 views
0

다른 선택 상자에 종속성을 가진 일부 선택 상자를 만들려고합니다. 나는 Seam을 처음 접했을 뿐이다. 여기 내 JSF입니다 - 하나가 새로 고쳐지지 않습니다 클릭 한 후 - 내가 제 시간에 기술 유형을 설정할 수 있습니다Seam - ListSelectMenus with dependencies

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() { 
} 

} 

데이터 테이블

<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> 

내 백업 콩을 표시하기 위해 노력하고있어 테스트 목적으로 슬프게도. 내가 여기서 뭐하고 있는거야?

답변

1

'기술 유형'을 선택하면 선택한 기술 유형에 따라 제품 유형을 다시로드하는 작업이 필요합니다. 비슷한 것 action=#{Profil.loadProductLines()}