p:selectonemenu不工作(JSF)

p:selectonemenu不工作(JSF),jsf,primefaces,selectonemenu,Jsf,Primefaces,Selectonemenu,我有这个问题。 我想为自定义选择数据创建selectOneMenu。但它不起作用,我真的不知道为什么。我花了5个小时来解决这个问题。我太绝望了。 所以我的一些代码: 但当我从selectonemenu中选择某个项目时,selected\u id仍然为0。还是,还是。我几乎什么都想做,但没有结果 我试过这个: <p:selectOneMenu value="#{medicinesBean.selectedBranch}" required="true" effect="fade" id

我有这个问题。 我想为自定义选择数据创建selectOneMenu。但它不起作用,我真的不知道为什么。我花了5个小时来解决这个问题。我太绝望了。 所以我的一些代码:

但当我从selectonemenu中选择某个项目时,selected\u id仍然为0。还是,还是。我几乎什么都想做,但没有结果

我试过这个:

 <p:selectOneMenu value="#{medicinesBean.selectedBranch}" required="true" effect="fade" id="listComboBox">
                <f:selectItems value="#{medicinesBean.branchesForComboBox}" var="itm" itemLabel="#{itm.name}" itemValue="#{itm.id}" />
            </p:selectOneMenu>

    Backing Bean class:

     /* private members */
        private ArrayList<BranchDTO> branchesForComboBox = new ArrayList<BranchDTO>();
        private BranchDTO selectedBranch;

    /* getter and setters ... */
我也尝试了SelectItem[]模型,但结果是一样的。不工作

然后我试着这样做:

<p:selectOneMenu value="#{medicinesBean.selected_id}" required="true" effect="fade" id="listComboBox">
                <f:selectItem itemLabel="First" itemValue="1"/>
                <f:selectItem itemLabel="Second" itemValue="2"/>
                <f:selectItem itemLabel="Third" itemValue="3"/>
                <f:selectItem itemLabel="Fouth" itemValue="4"/>
</p:selectOneMenu>

/* private members */
private int selected_id;
但仍然是0。当我对selectonemenu使用类似对象的值时,总是返回AlwaysNull异常。因此,我很乐意为您提供这方面的任何建议。 谢谢

brw。支持bean是viewscope的,来自DAO的数据被正确返回,所以组件selectonemenu中会出现一些bug

谢谢BalusC,下面是我的实现

背豆

/**
 * @author Sajmon
 */

package OraclBeans;

import DTOs.PobockaDTO;
import DTOs.ZoznamLiekovDTO;
import EJBs.ZoznamLiekovEJB;
import java.io.Serializable;
import java.util.ArrayList;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ManagedBean(name="zoznamLiekovBean")
@ViewScoped
public class ZoznamLiekovBean implements Serializable {

    @EJB
    private ZoznamLiekovEJB listOfMedicineEJB;

    /* private members */
    private ArrayList<ZoznamLiekovDTO> listOfMedicines;
    private ArrayList<PobockaDTO> branchesForCombobox = new ArrayList<PobockaDTO>();
    private ZoznamLiekovDTO selectedItem;
    private PobockaDTO selectedBranch;
    //private SelectItem[] branchesOptions;
    //private SelectItem selectedOption;
    private int selected_id;


    public ZoznamLiekovBean() {
    }

    @PostConstruct
    private void init() {
        branchesForCombobox = listOfMedicineEJB.getBranches();
        listOfMedicines = listOfMedicineEJB.getLists();
    }


    public void test() {
       System.out.println("ID: " + selected_id);
    }

    /*
    private SelectItem[] addItemsToOptions() {
        SelectItem[] data = new SelectItem[branchesForCombobox.size()];
        for (int i = 0; i < branchesForCombobox.size(); i++) {
            data[i] = new SelectItem(branchesForCombobox.get(i).getId(), branchesForCombobox.get(i).getNazov());
        }
        return data;
    }
    */




    /* getters and setters */

    /*
    public SelectItem[] getBranchesOptions() {
        return branchesOptions;
    }

    public void setBranchesOptions(SelectItem[] branchesOptions) {
        this.branchesOptions = branchesOptions;
    }

    public void setSelectedOption(SelectItem selectedOption) {
        this.selectedOption = selectedOption;
    }

    public SelectItem getSelectedOption() {
        return selectedOption;
    }
    */

    public ArrayList<PobockaDTO> getBranchesForCombobox() {
        return branchesForCombobox;
    }

    public void setBranchesForCombobox(ArrayList<PobockaDTO> branchesForCombobox) {
        this.branchesForCombobox = branchesForCombobox;
    }

    public ArrayList<ZoznamLiekovDTO> getListOfMedicines() {
        return listOfMedicines;
    }

    public void setListOfMedicines(ArrayList<ZoznamLiekovDTO> listOfMedicines) {
        this.listOfMedicines = listOfMedicines;
    }

    public PobockaDTO getSelectedBranch() {
        return selectedBranch;
    }

    public void setSelectedBranch(PobockaDTO selectedBranch) {
        this.selectedBranch = selectedBranch;
    }

    public ZoznamLiekovDTO getSelectedItem() {
        return selectedItem;
    }

    public void setSelectedItem(ZoznamLiekovDTO selectedItem) {
        this.selectedItem = selectedItem;
    }

    public int getSelected_id() {
        return selected_id;
    }

    public void setSelected_id(int selected_id) {
        this.selected_id = selected_id;
    }
}
EJB:

道:

和XHTML:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui" 
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Zoznam liekov - prehľad</title>
        <link rel="stylesheet" type="text/css" href="../style.css" />
    </h:head>
    <h:body>
        <div id="out">
        <h:form id="mainForm">
            <p:selectOneMenu value="#{zoznamLiekovBean.selected_id}" required="true" effect="fade" id="zoznamComboBox">
                <f:selectItems value="#{zoznamLiekovBean.branchesForCombobox}" var="itm" itemLabel="#{itm.nazov}" itemValue="#{itm.id}"/>
            </p:selectOneMenu>
            <p:commandButton immediate="true" styleClass="submitClass" value="Generuj zoznam" update="dialogText" actionListener="#{zoznamLiekovBean.test()}"/>
            <p:dataTable style="width: 1100px" widgetVar="zoznamLiekovTable" selection="#{zoznamLiekovBean.selectedItem}" selectionMode="single" rowKey="#{item.id}" var="item" value="#{zoznamLiekovBean.listOfMedicines}" rows="5" rowsPerPageTemplate="5,10,15,20"
                         paginator="true" paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink}">
                <p:column>
                    <f:facet name="header">ID:</f:facet>
                    <h:outputText value="#{item.id}"/>
                </p:column>

                <p:column>
                    <f:facet name="header">Pobočka:</f:facet>
                    <h:outputText value="#{item.pobocka.nazov}"/>
                </p:column>

                <p:column>
                    <f:facet name="header">Liek:</f:facet>
                    <h:outputText value="#{item.liek.nazov}"/>
                </p:column>
            </p:dataTable>

            <p:dialog widgetVar="test" showEffect="explode" hideEffect="explode">
                <h:outputText id="dialogText" value="#{zoznamLiekovBean.selected_id}"/>
            </p:dialog>
        </h:form>
        </div>
    </h:body>
</html>
从commandButton中删除immediate=true。您将跳过整个应用请求值阶段-更新模型值阶段。这就是为什么您的值总是为null或0


@嗨,伙计,你回答得比我早。这就是我删除它的原因
/**
 * @author Sajmon
 */

package OraclDAO;

import DTOs.PobockaDTO;
import DTOs.ZoznamLiekovDTO;
import OraclDAOFactory.OracleDAOFactory;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

public class OracleZoznamLiekovDAO implements Serializable {

    private String SELECT_ALL = "SELECT Z.id_zoznamu, P.nazov_pobocky, L.nazov_lieku FROM Zoznam_liekov Z "
            + "JOIN Pobocka P ON (Z.id_pobocky = P.id_pobocky)"
            + "JOIN Liek L ON (Z.id_lieku = L.id_lieku)";
    private String SELECT_BRANCHES = "SELECT DISTINCT P.id_pobocky, P.nazov_pobocky FROM Zoznam_liekov Z JOIN Pobocka P ON (Z.id_pobocky = P.id_pobocky)";


    public OracleZoznamLiekovDAO() {

    }

    public ArrayList<PobockaDTO> getBranchesForCombobox() {

        ArrayList<PobockaDTO> data = new ArrayList<PobockaDTO>();
        PobockaDTO item;
        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            con = OracleDAOFactory.getOracleDatabaseConnection();
            ps = con.prepareStatement(SELECT_BRANCHES);
            rs = ps.executeQuery();
            while (rs.next()) {
                item = new PobockaDTO();
                item.setId(rs.getInt(1));
                item.setNazov(rs.getString(2));
                data.add(item);
            }
            System.out.println("Data imported to list successfully.");
        }
        catch (SQLException ex) {
            Logger.getLogger(OracleZoznamLiekovDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        finally {
            if (con != null) {
                try {
                    con.close();
                }
                catch (SQLException ex) {
                    Logger.getLogger(OracleZoznamLiekovDAO.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
        return data;
    }


    public ArrayList<ZoznamLiekovDTO> getListOfMedicines() {

        ArrayList<ZoznamLiekovDTO> data = new ArrayList<ZoznamLiekovDTO>();
        ZoznamLiekovDTO item;

        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            con = OracleDAOFactory.getOracleDatabaseConnection();
            ps = con.prepareStatement(SELECT_ALL);
            rs = ps.executeQuery();
            while (rs.next()) {
                item = new ZoznamLiekovDTO();
                item.setId(rs.getInt(1));
                item.getPobocka().setNazov(rs.getString(2));
                item.getLiek().setNazov(rs.getString(3));
                data.add(item);
            }
            System.out.println("List of Medicines imported successfully.");

        } 
        catch (SQLException ex) {
            Logger.getLogger(OracleZoznamLiekovDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        finally {
            if (con != null) {
                try {
                    con.close();
                } 
                catch (SQLException ex) {
                    Logger.getLogger(OracleZoznamLiekovDAO.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
        return data;
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui" 
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Zoznam liekov - prehľad</title>
        <link rel="stylesheet" type="text/css" href="../style.css" />
    </h:head>
    <h:body>
        <div id="out">
        <h:form id="mainForm">
            <p:selectOneMenu value="#{zoznamLiekovBean.selected_id}" required="true" effect="fade" id="zoznamComboBox">
                <f:selectItems value="#{zoznamLiekovBean.branchesForCombobox}" var="itm" itemLabel="#{itm.nazov}" itemValue="#{itm.id}"/>
            </p:selectOneMenu>
            <p:commandButton immediate="true" styleClass="submitClass" value="Generuj zoznam" update="dialogText" actionListener="#{zoznamLiekovBean.test()}"/>
            <p:dataTable style="width: 1100px" widgetVar="zoznamLiekovTable" selection="#{zoznamLiekovBean.selectedItem}" selectionMode="single" rowKey="#{item.id}" var="item" value="#{zoznamLiekovBean.listOfMedicines}" rows="5" rowsPerPageTemplate="5,10,15,20"
                         paginator="true" paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink}">
                <p:column>
                    <f:facet name="header">ID:</f:facet>
                    <h:outputText value="#{item.id}"/>
                </p:column>

                <p:column>
                    <f:facet name="header">Pobočka:</f:facet>
                    <h:outputText value="#{item.pobocka.nazov}"/>
                </p:column>

                <p:column>
                    <f:facet name="header">Liek:</f:facet>
                    <h:outputText value="#{item.liek.nazov}"/>
                </p:column>
            </p:dataTable>

            <p:dialog widgetVar="test" showEffect="explode" hideEffect="explode">
                <h:outputText id="dialogText" value="#{zoznamLiekovBean.selected_id}"/>
            </p:dialog>
        </h:form>
        </div>
    </h:body>
</html>