来自托管bean的列表未显示在faces数据表中

时间:2013-05-19 18:42:31

标签: jsf datatable view-scope

我无法获取从托管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>

我错过了什么?

1 个答案:

答案 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"));
}