我需要创建一个访问数据库的程序,并将值传递给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;
}
答案 0 :(得分:1)
这实际上不是在JSF中制作下拉菜单的方法。我建议阅读一些JSF初学者指南,甚至HTML初学者指南也可能有所帮助(例如,代码中没有<form>
。
首先,JSF使用组件来创建用户界面。您无需创建HTML select
和option
元素。如果您使用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
}