JSF:如何写入数据库?
我是JSF的初学者,我似乎无法做到这一点。 我正在尝试在表单中获取用户输入,并在用户单击提交时将其插入到数据库中。 所以我在前端所拥有的只是一个表单和表单标签中的提交按钮:
FormBean:
private String jobTitle; public void setJobTitle(String jobTitle) { this.jobTitle = jobTitle; } public String getJobTitle() { return jobTitle; public void addJobProfile() { DatabaseHelper.populateDatabase(this.getJobTitle());
DatabaseHelper:
public class DatabaseHelper { private static Connection createConnection() throws NamingException, SQLException { Context ctx = new InitialContext(); if (ctx == null) { throw new NamingException("No initial context"); } Context envContext = (Context) ctx.lookup("java:/comp/env"); if (envContext == null) { throw new NamingException("No environment context"); } DataSource ds = (DataSource) envContext.lookup("jdbc/ecr"); if (ds == null) { throw new NamingException("No data source"); } Connection conn = ds.getConnection(); if (conn == null) { throw new SQLException("No database connection"); } return conn; } public static void populateDatabase(String jt) { Connection connection; try { connection = createConnection(); String insertSQL = "INSERT INTO JOBPROFILE(JOBTITLE) VALUES (' " + jt + "' )"; executeUpdate(connection, insertSQL); } catch (SQLException sqle) { sqle.printStackTrace(); } catch (NamingException ne) { ne.printStackTrace(); } } private static void executeUpdate(Connection connection, String sql) { Statement stmt = null; try { stmt = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); stmt.setQueryTimeout(30); stmt.executeUpdate(sql); } catch (SQLException exc) { try { if (stmt != null) { stmt.close(); } } catch (SQLException e) { e.printStackTrace(); } } }
}
我还配置了context.xml:
我想这不是数据库连接问题,因为我已经测试过了。 非常感谢任何帮助。 JOBPROFILE表已在db中创建,在请求范围内注册的托管bean。 我试着效仿这个例子 – > http://docs.aptana.com/docs/index.php/Creating_a_JSF_Application
我现在面临这个错误:java.io.NotSerializableException:org.apache.tomcat.dbcp.dbcp.BasicDataSource
看来你的bean(或它的依赖项)中有一个BasicDataSource
作为成员。 出于某种原因,JSF尝试序列化您的bean,但数据源不是Serializable。 最快的解决方案是将其标记为transient
。 即
private transient BasicDataSource dataSource;