我使用的是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
任何帮助将不胜感激!
答案 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;
}
}