Список из управляемого компонента не отображается в данных лиц

Я не могу получить список, полученный из управляемого компонента, для отображения в таблице данных в JSF.

Когда я отлаживаю его, в списке есть один элемент, когда он вызывает метод для 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>

Что мне не хватает?


person diminuta    schedule 19.05.2013    source источник


Ответы (1)


Когда вы возвращаете 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"));
}
person Luiggi Mendoza    schedule 19.05.2013
comment
У меня есть правило навигации для него, и оно возвращается к index.xhtml... что и предполагается делать... но когда оно возвращается к index.xhtml после возврата из findMyBeans, и хотя результаты имеют список с один результат, он ничего не показывает в таблице данных... - person diminuta; 20.05.2013
comment
Другими словами, вы даже не пробовали ответ Луиджи? Когда вы возвращаете значение, отличное от null/void, будет создано новое представление (при этом все bean-компоненты с областью видимости будут воссозданы, включая тот, в котором вы сохранили результаты!) - person BalusC; 20.05.2013
comment
Извините, что потребовалось так много времени, чтобы принять ответ, но я не мог попробовать его до сих пор: S - person diminuta; 30.05.2013