JSF 2.0 outputText呈现selectonemenu

时间:2014-02-24 11:21:40

标签: jsf-2 primefaces selectonemenu

我使用的是JSF-2,我希望在更改h时显示一个Outputtext:selectOneMenu值为'A',但它不起作用:

以下是观点:

 <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

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

由于#{Controller.typeAOk}似乎是错误的,因此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;
    }

}