带参数的@postConstruct方法

时间:2015-06-10 00:20:54

标签: jsf datatable view-scope

我在数据库上有一个订单列表,我想在两个JSF页面中显示两个单独的数据表:一个关于所有订单的表,一个关于当前登录用户的表。 问题是,只有第一个实际显示在页面上。

带有数据表链接的JSF页面

<h:commandLink action="#{ordineController.listaOrdini}"
        value="Consulta gli ordini esistenti" rendered="#{not empty loginAdmin.admin.email}"/>
    <div>
        <h:commandLink
            action="#{ordineController.listaOrdiniCliente}"
            value="Controlla i tuoi ordini"
            rendered="#{not empty loginCliente.clienteLoggato.email}">
            <f:setPropertyActionListener target="#{ordineController.clienteCorrente}"
                value="#{loginCliente.clienteLoggato}" />
        </h:commandLink>
</div>

ViewScoped bean

     @ManagedBean(name="ordineController")
@ViewScoped
public class OrdineController implements Serializable {

/**
     * 
     */
    private static final long serialVersionUID = 1L;
    @PostConstruct
    public void init() {
        ordini = oFacade.getListaOrdini();
        listaOrdiniCliente();
    } 
    public String listaOrdini() {
        this.ordini = oFacade.getListaOrdini();
        return "showOrdini"; 
    }

    public String listaOrdiniCliente() {
        this.ordiniCliente = oFacade.getOrdiniCliente(clienteCorrente);
        return "showOrdiniCliente"; 
    }
/*Getters and setters*

不起作用的JSF页面(showOrdiniCliente.xhtml)

<h:outputText value="Non c'è nessun ordine."
        rendered="#{empty ordineController.ordiniCliente}" />
    <h:dataTable id="lista" value="#{ordineController.ordiniCliente}"
        var="ordine" rendered="#{not empty ordineController.ordiniCliente}">

可行的JSF页面(showOrdini.xhtml)

<h:outputText value="Non c'è nessun ordine."
    rendered="#{empty ordineController.ordini}" />
<h:form rendered="#{not empty ordineController.ordini}">
    <h:dataTable id="lista" value="#{ordineController.ordini}"
        var="ordine">

为什么#{ordineController.ordiniCliente}为空? 不应该与&#34; ordini&#34;一起建造。 @PostConstruct中的变量?

修改的 Facade方法(它检索客户的所有订单)

public List<Ordine> getOrdiniCliente (Cliente cliente) {

    try {
        TypedQuery<Ordine> q = em.createQuery("SELECT ord FROM Ordine ord WHERE ord.cliente = :cliente", Ordine.class);
        q.setParameter("cliente", cliente);
        return q.getResultList();

    } 
    catch (Exception e) {
        String q = "Il cliente " +cliente.getNickname()+ " non ha creato degli ordini";
        System.out.println(q);
        return null;

    }

}

0 个答案:

没有答案