我无法获取从托管bean获取的列表以显示在JSF中的数据表中。
当我调试它时,列表在调用bean上的方法时有一个元素,但页面中没有显示数据表中的元素。
托管bean是:
@ManagedBean
@ViewScoped
public class MyBeanMB {
private List<MyBean> results = new ArrayList<MyBean>();
private MyBean myBean = new MyBean();
@EJB
private MyBeanService myBeanService;
public String findMyBeans() {
results = myBeanService.findMyBeans(myBean);
myBean = new myBeans();
if (results != null && !results.isEmpty()) {
return "success";
}
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("No results found"));
return null;
}
index.xhtml页面中的表单如下所示:
<h:form>
<h:messages />
<h:outputLabel value="Nombre: " for="nombre"/>
<h:inputText id="nombre" value="#{myBeanMB.myBean.name}" />
<h:commandButton value="Buscar" action="#{myBeanMB.findMyBeans}" />
<h:dataTable id="list" value="#{myBeanMB.results}" var="item">
<h:column>
<f:facet name="header">
<h:outputText value="Name"/>
</f:facet>
<h:outputText value= "#{item.name}" />
</h:column>
</h:dataTable>
</h:form>
我错过了什么?
答案 0 :(得分:2)
当您在托管bean中返回success
时,JSF将导航到 success.xhtml 视图(假设您没有在 faces-config中设置导航规则。 xml 文件),该列表应在此视图中处理,而不是在 index.xhtml 中处理。要修复您的代码,请将findMyBeans
方法更改为void
而不是String
。
public void findMyBeans() {
results = myBeanService.findMyBeans(myBean);
myBean = new myBeans();
if (results != null && !results.isEmpty()) {
return;
}
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("No results found"));
}