在JSF中创建一个下拉程序

时间:2017-04-30 10:31:31

标签: jsf jsf-2

我需要创建一个访问数据库的程序,并将值传递给JSF中的下拉列表。我想知道如何做到这一点。我得到它的第一个下拉列表,但第二个下拉列表是棘手的,因为它需要一个输入参数才能工作。这是我的JSF代码:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:f="http://xmlns.jcp.org/jsf/core">
<head>    
<title>Dropdown List</title>
</head>
<body>
    <select id="mySelect" onchange="myFunction()">
        <h:outputText value="#{helloWorld.getResultSet1()}" escape="false" />    
        <f:attribute name="action" value="1" />
    </select>
    <br />
    <select id="mySelect1">
    </select>
    <script>
        var x1 = document.getElementById("mySelect1");    
        x1.style.display = 'none';
        function myFunction() {
            x1.style.display = 'block';
            x1.innerHtml = '<h:outputText value="#{helloWorld.getResultSet2()}" escape="false" />';
        }
        document.getElementById('myForm:hidden2').value = new_value;
    </script>
</body>
</html>

这是我的java代码:

public String id = "1";

    public void print(String name) {
        System.out.println(name);
    }
    public String getResultSet2(String name) {
        String toReturn = "";

        try {
            rs = st.executeQuery("SELECT * FROM CS_EXAMS where name ="+ name);
            System.out.println(name);
            while (rs.next()) {
                toReturn = toReturn + "<option>" + rs.getString("exam_name") + "</option>";
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return toReturn;
    }

    public String getResultSet1() {
        String toReturn = "";

        try {
            rs = st.executeQuery("SELECT * FROM CS_EXAMS");
            System.out.println("name");
            while (rs.next()) {
                toReturn = toReturn + "<option>" + rs.getString("exam_name") + "</option>";
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return toReturn;

    }

2 个答案:

答案 0 :(得分:1)

这实际上不是在JSF中制作下拉菜单的方法。我建议阅读一些JSF初学者指南,甚至HTML初学者指南也可能有所帮助(例如,代码中没有<form>

首先,JSF使用组件来创建用户界面。您无需创建HTML selectoption元素。如果您使用selectOneMenu,它将负责为您创建HTML。更重要的是,您还可以获得价值绑定,验证,更改侦听器等等等开箱即用的功能。

因此,请尝试通过以下方式创建selectOneMenu

如果您需要在下拉列表中找到POJO对象,请阅读:

现在,要解决根据第一个下拉列表的选择更新第二个下拉列表的问题,请阅读:

答案 1 :(得分:0)

字符串应介于'name'

之间
rs = st.executeQuery("SELECT * FROM CS_EXAMS where name = '" + name + "'");

但你必须改用PreparedStatement:

try (PreparedStatement ps = connection.prepareStatement(
        "SELECT * FROM CS_EXAMS where name = ?"")) {
    ps.setString(1, name));

    rs = ps.executeQuery();

    while (rs.next()) {
         toReturn = toReturn + "<option>" + rs.getString("exam_name") + "</option>";
    }
    //...complete your code
}