2014-02-24 65 views
1

我米使用JSF-2和I要顯示的的outputText時改變H:selectOneMenu用於值 'A',但它不工作:JSF 2.0的outputText渲染selectOneMenu用於

這裏是視圖:

<p:column> 
<p:selectOneMenu id="type" 
value="#{Controller.typeR}" style="width:100px;"> 
    <f:selectItem itemLabel="--Selectionner--" itemValue="-1" /> 
    <f:selectItem itemLabel="A" itemValue="1" /> 
    <f:selectItem itemLabel="B" itemValue="2" /> 
    <f:selectItem itemLabel="C" itemValue="3" /> 
<p:ajax update="test" 
listener="#{Controller.handleTypeChange}" /> 
</p:selectOneMenu> 
</p:column> 
<p:column> 
    <h:outputText id ="test" value="A OK :" rendered="#{Controller.typeAOk}" /> 
</p:column> 

管理bean

@SuppressWarnings("serial") 
@ManagedBean(name = "Controller") 
@ViewScoped 
public class NoIe{ 

public void handleTypeChange(){   
     if (typeR.equals("1")) { 
      setTypeAOk(true); 
      System.out.print(typeAOk); 
      }} 

    //Getter and Setter 

任何幫助將不勝感激!

+0

在裏面的DataTable或列panelGrid的? –

+0

他們在裏面panelGrid – user3070142

回答

1

由於#{Controller.typeAOk}似乎是false您的outputText不會成爲生成的html頁面的一部分,因此它將不可用於更新。

在這種情況下,您需要將outputText封裝到另一個組件中,然後更新始終呈現的組件。這裏是一個例子:

<p:column> 
    <p:outputPanel id="test"> 
     <h:outputText value="A OK :" rendered="#{Controller.typeAOk}" /> 
    </p:outputPanel> 
</p:column> 

再次:只有渲染的組件可以更新。

這裏是我用來測試解決方案(請注意,您可以使用panelGroup中太)的完整代碼:

<h:form> 
    <p:dataTable value="#{viewMBean.list}" var="l"> 
     <p:column> 
      <p:selectOneMenu id="type" value="#{viewMBean.id}" style="width:100px;"> 
       <f:selectItem itemLabel="--Selectionner--" itemValue="-1" /> 
       <f:selectItem itemLabel="A" itemValue="1" /> 
       <f:selectItem itemLabel="B" itemValue="2" /> 
       <f:selectItem itemLabel="C" itemValue="3" /> 
       <p:ajax update="test" /> 
      </p:selectOneMenu> 
     </p:column> 
     <p:column> 
      <h:panelGroup id ="test"> 
       <h:outputText value="A OK :" rendered="#{viewMBean.id eq 1}" /> 
      </h:panelGroup> 
     </p:column> 
    </p:dataTable> 
</h:form> 

的ManagedBean

import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.List; 
import javax.annotation.PostConstruct; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ViewScoped; 

@ManagedBean 
@ViewScoped 
public class ViewMBean implements Serializable { 

    private Integer id; 

    private List<SimpleBean> list; 

    @PostConstruct 
    public void setup() { 
     list = new ArrayList<SimpleBean>(); 
     list.add(new SimpleBean(11, "A")); 
     list.add(new SimpleBean(22, "B")); 
     list.add(new SimpleBean(33, "C")); 
    } 

    public Integer getId() { 
     return id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

    public List<SimpleBean> getList() { 
     return list; 
    } 

} 
+0

謝謝@丹尼爾,我試過你的解決方案,但要麼它不工作:( – user3070142

+0

我已經更新了答案。 –

+0

其工作很好謝謝。如果我想要做的所有組件 ?它試圖在一個panelGroup內部換行的所有列,但它不起作用 – user3070142