2014-02-24 60 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