所以我正在尝试使用JSF创建一个基本的Web应用程序。我有一个带有2个文本输入的primefaces表,用于向表中添加行。当我单击添加按钮时,该行将插入到mySQL数据库中。然后读取数据库并显示在表中。我希望表自动更新以显示新添加的行,但是发生的事情是我在我的localhost:8080选项卡旁边加载循环,我必须关闭页面,然后从netbeans重新打开它以获取信息显示。
继承我的xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h1>Climbing Routes</h1>
<h:head>
<h:outputStylesheet library="css" name="table-style.css" />
</h:head>
<h:body>
<p:dataTable value="#{route.getRouteList()}" var="r"
styleClass="order-table">
<p:column headerText="Route"> #{r.routeName}</p:column>
<p:column headerText="Route Grade"> #{r.routeGrade}</p:column>
</p:dataTable>
<h:form>
<h:outputLabel for="txtName">
<h:outputText value="Enter Route Name"/>
</h:outputLabel>
<p:inputText id="txtName" value="#{route.userRouteName}"/>
<br></br>
<h:outputLabel for="txtPrice">
<h:outputText value="Enter Route Grade"/>
</h:outputLabel>
<p:inputText id="txtPrice" value="#{route.userRouteGrade}"/>
<p:commandButton id="insert" value="Add Route" action="#{route.addRoute()}" update=":idform" />
<p:commandButton id="remove" value="Remove Route" action="#{route.deleteRoute()}" update=":idform"/>
</h:form>
</h:body>
和我的java
@ManagedBean(name="route")
@SessionScoped
public class Product {
private DataSource ds;
String routeName;
String routeGrade;
String userRouteName;
String userRouteGrade;
public void setUserRouteName(String userRouteName) {
this.userRouteName = userRouteName;}
public String getUserRouteName() {
return userRouteName;
}
public void setUserRouteGrade(String userRouteGrade) {
this.userRouteGrade = userRouteGrade;}
public String getUserRouteGrade() {
return userRouteGrade;
}
public String getRouteName() {
return routeName;
}
public void setRouteName(String routeName) {
this.routeName = routeName;
}
public String getRouteGrade() {
return routeGrade;
}
public void setRouteGrade(String routeGrade) {
this.routeGrade = routeGrade;
}
public Product(){
try {
Context ctx = new InitialContext();
ds = (DataSource)ctx.lookup("java:comp/env/jdbc/routes");
} catch (NamingException e) {
e.printStackTrace();
}
}
//connect to DB
public List<Product> getRouteList() throws SQLException{
if(ds==null)
throw new SQLException("Can't get data source");
//get database connection
Connection con = ds.getConnection();
if(con==null)
throw new SQLException("Can't get database connection");
PreparedStatement ps
= con.prepareStatement(
"select routeName, routeGrade from routes");
ResultSet result = ps.executeQuery();
List<Product> list = new ArrayList<>();
while(result.next()){
Product route = new Product();
route.setRouteName(result.getString("routeName"));
route.setRouteGrade(result.getString("routeGrade"));
//store all data into a List
list.add(route);
}
return list;
}
public void addRoute() throws SQLException{
//get database connection
Connection con = ds.getConnection();
Statement stmt = con.createStatement();
String sql = "INSERT INTO routes(routeName,routeGrade) "
+ "VALUES('"+userRouteName+"','"+userRouteGrade+"')";
stmt.executeUpdate(sql);
}
public void deleteRoute() throws SQLException,IOException{
//get database connection
Connection con = ds.getConnection();
Statement stmt = con.createStatement();
String SQL = "DELETE FROM routes WHERE routeName = '"+userRouteName+"' ";
stmt.execute(SQL);
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
ec.redirect(((HttpServletRequest) ec.getRequest()).getRequestURI());
}
}
我确信这是一个简单的修复,但这是我第一次尝试创建一个Web应用程序。 谢谢你的帮助
更新了命令按钮代码