将数据插入表并显示更新的表后刷新页面

时间:2017-03-06 20:01:33

标签: jsf primefaces

所以我正在尝试使用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应用程序。 谢谢你的帮助

更新了命令按钮代码

0 个答案:

没有答案