A friendly place for programming greenhorns!
Big Moose Saloon
Search
|
Java FAQ
|
Recent Topics
Register / Login
Win a copy of
Arduino in Action
this week in the
General Computing
forum!
A special promo:
Enter your blog post or vote on a blogger to be featured in an upcoming Journal
JavaRanch
»
Java Forums
»
Frameworks
»
Struts
Author
A issue in Struts1.x
Zhang Jones
Greenhorn
Joined: Feb 02, 2011
Posts: 16
posted
Jul 13, 2011 08:44:43
0
[b]CharacterEncodingFilter.java[/b] package com.phei.action; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class CharacterEncodingFilter implements Filter { public void destroy() { // TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { ((HttpServletRequest)request).setCharacterEncoding("UTF-8"); ((HttpServletResponse)response).setCharacterEncoding("UTF-8"); chain.doFilter(request, response); } public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } } [b]PersonAction.java[/b] package com.phei.action; import java.sql.Connection; import java.sql.Date; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import com.phei.bean.Person; import com.phei.dao.PersonDao; import com.phei.form.PersonForm; public class PersonAction extends Action { @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { PersonForm personForm = (PersonForm) form; if ("add".equals(personForm.getAction())) { return add(mapping, form, request, response); } else if ("list".equals(personForm.getAction())){ return list(mapping, form, request, response); } return null; } public ActionForward add(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { PersonForm personForm = (PersonForm) form; Date birthday = new Date(new SimpleDateFormat("yyyy-MM-dd").parse(personForm.getBirthday()).getTime()); Person person = new Person(); person.setName(personForm.getName()); person.setAccount(personForm.getAccount()); person.setSecret(personForm.isSecret()); person.setBirthday(birthday); person.setHobby(Arrays.asList(personForm.getHobby())); PersonDao personDao = new PersonDao(); Connection conn = getDataSource(request).getConnection(); personDao.addPerson(conn, person); request.setAttribute("person", person); return mapping.findForward("success"); } private ActionForward list(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { PersonDao personDao = new PersonDao(); Connection conn = getDataSource(request).getConnection(); List<Person> personList = personDao.listPersons(conn); request.setAttribute("personList", personList); return mapping.findForward("list"); } } [b]Person.java[/b] package com.phei.bean; import java.sql.Date; import java.sql.Timestamp; import java.util.List; public class Person { private Integer id; private String name; private String account; private Date birthday; private boolean secret; private Timestamp createDate; private List<String> hobby; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAccount() { return account; } public void setAccount(String account) { this.account = account; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public boolean isSecret() { return secret; } public void setSecret(boolean secret) { this.secret = secret; } public Timestamp getCreateDate() { return createDate; } public void setCreateDate(Timestamp createDate) { this.createDate = createDate; } public List<String> getHobby() { return hobby; } public void setHobby(List<String> hobby) { this.hobby = hobby; } } [b]PersonDao.java[/b] package com.phei.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import com.phei.bean.Person; public class PersonDao { public void addPerson(Connection conn, Person person) throws SQLException { String personSql = "insert into tb_person " + "(name, account, birthday, create_date, secret) values (?, ?, ?, ?, ?)"; String hobbySql = "insert into tb_hobby (person_id, hobby) values (?, ?)"; PreparedStatement prestmt = null; ResultSet rs = null; try { conn.setAutoCommit(false); prestmt = conn.prepareStatement(personSql); int index = 1; prestmt.setString(index++, person.getName()); prestmt.setString(index++, person.getAccount()); prestmt.setDate(index++, person.getBirthday()); prestmt.setTimestamp(index++, person.getCreateDate()); prestmt.setBoolean(index++, person.isSecret()); prestmt.executeUpdate(); rs = prestmt.getGeneratedKeys(); rs.next(); int personId = rs.getInt(1); prestmt = conn.prepareStatement(hobbySql); for (Iterator<String> iterator = person.getHobby().iterator(); iterator.hasNext();) { prestmt.setInt(1, personId); prestmt.setString(2, iterator.next()); prestmt.addBatch(); } prestmt.executeBatch(); conn.commit(); } finally { if (rs != null) rs.close(); if (prestmt != null) prestmt.close(); if (conn != null) conn.close(); } } public List<Person> listPersons(Connection conn) throws SQLException { List<Person> list = new ArrayList<Person>(); Statement stmt = null; ResultSet rs = null; try { stmt = conn.createStatement(); rs = stmt.executeQuery("select * from tb_person"); while (rs.next()) { Person person = new Person(); person.setId(rs.getInt("id")); person.setName(rs.getString("name")); person.setAccount(rs.getString("account")); person.setBirthday(rs.getDate("birthday")); person.setCreateDate(rs.getTimestamp("create_date")); person.setSecret(rs.getBoolean("secret")); list.add(person); } for (Iterator<Person> iterator = list.iterator(); iterator.hasNext();) { Person person = (Person) iterator.next(); rs = stmt.executeQuery("select * from tb_hobby where person_id = " + person.getId()); while (rs.next()) { person.getHobby().add(rs.getString("hobby")); } } } finally { if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (conn != null) conn.close(); } return list; } } [b]PersonForm.java[/b] package com.phei.form; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; public class PersonForm extends ActionForm { /** * */ private static final long serialVersionUID = 2518421519500010243L; private Integer id; private String name; private String account; private String birthday; private String[] hobby; private boolean secret; private String action; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAccount() { return account; } public void setAccount(String account) { this.account = account; } public String getBirthday() { return birthday; } public void setBirthday(String birthday) { this.birthday = birthday; } public String[] getHobby() { return hobby; } public void setHobby(String[] hobby) { this.hobby = hobby; } public boolean isSecret() { return secret; } public void setSecret(boolean secret) { this.secret = secret; } public String getAction() { return action; } public void setAction(String action) { this.action = action; } @Override public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors(); if (name == null || name.trim().length() == 0) { errors.add("name", new ActionMessage("person.error.name")); } if (birthday == null || birthday.trim().length() == 0) { errors.add("birthday", new ActionMessage("person.error.birthday")); } if (hobby == null || hobby.length == 0) { errors.add("hobby", new ActionMessage("person.error.hobby")); } if (account == null || account.trim().length() == 0) { errors.add("account", new ActionMessage("person.error.account")); } return errors; } } [b]init.sql[/b] create table tb_person( id integer auto_increment, name varchar(255), account varchar(255), birthday date, create_date timestamp, secret bit, primary key(id)); create table tb_hobby( person_id integer, hobby varchar(255), primary key(person_id, hobby)); [b]addPerson.jsp[/b] <%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%> <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>JSP for PersonForm</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <html:form action="/person"> <html:hidden property="action" value="add"/> 账号:<html:text property="account"/> <b style="font-size: 16px; color: red;"><html:errors property="account"/></b><br/> 姓名:<html:text property="name"/> <b style="font-size: 16px; color: red;"><html:errors property="name"/></b><br/> 生日:<html:text property="birthday"/> <b style="font-size: 16px; color: red;"><html:errors property="birthday"/></b><br/> 爱好:<html:checkbox property="hobby" value="足球">足球</html:checkbox> <html:checkbox property="hobby" value="影视">影视</html:checkbox> <html:checkbox property="hobby" value="音乐">音乐</html:checkbox> <html:checkbox property="hobby" value="美食">美食</html:checkbox> <html:checkbox property="hobby" value="旅游">旅游</html:checkbox> <html:checkbox property="hobby" value="摄影">摄影</html:checkbox> <html:checkbox property="hobby" value="登山">登山</html:checkbox> <b style="font-size: 16px; color: red;"><html:errors property="hobby"/></b><br/> 是否隐藏姓名:<html:checkbox property="secret"/><br/> <html:submit value="提交"/> </html:form> </body> </html> [b]listPerson.jsp[/b] <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%> <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%> <%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'listPerson.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <table> <tr> <th>ID</th> <th>账号</th> <th>姓名</th> <th>生日</th> <th>爱好</th> <th>是否隐藏姓名</th> </tr> <logic:iterate id="person" name="personList"> <tr> <td><bean:write name="person" property="id"/></td> <td><bean:write name="person" property="account"/></td> <td> <logic:equal value="false" name="person" property="secret"> <bean:write name="person" property="name"/> </logic:equal> </td> <td><bean:write name="person" property="birthday"/></td> <td> <logic:iterate id="hobby" name="person" property="hobby"> <bean:write name="hobby"/> </logic:iterate> </td> <td><bean:write name="person" property="secret"/></td> </tr> </logic:iterate> </table> </body> </html> [b]struts-config.xml[/b] <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> <struts-config> <data-sources> <data-source type="org.apache.commons.dbcp.BasicDataSource"> <set-property value="com.mysql.jdbc.Driver" property="driverClassName "/> <set-property value="jdbc:mysql://localhost:3306/struts?characterEncoding=UTF-8" property="url"/> <set-property value="root" property="username"/> <set-property value="root" property="password"/> </data-source> </data-sources> <form-beans> <form-bean name="personForm" type="com.phei.form.PersonForm"></form-bean> </form-beans> <global-exceptions /> <global-forwards /> <action-mappings> <action path="/person" attribute="personForm" scope="request" type="com.phei.action.PersonAction" input="/form/addPerson.jsp" name="personForm"> <forward name="success" path="/form/addPersonSuccess.jsp"></forward> <forward name="list" path="/form/listPerson.jsp"></forward> </action> </action-mappings> <message-resources parameter="com.phei.struts.ApplicationResources" /> </struts-config> [b]web.xml[/b] <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>3</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>3</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>com.phei.action.CharacterEncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app> HTTP Status 500 - -------------------------------------------------------------------------------- type Exception report message description The server encountered an internal error () that prevented it from fulfilling this request. exception javax.servlet.ServletException: java.sql.SQLException: Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate() or Connection.prepareStatement(). org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535) org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433) org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236) org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) javax.servlet.http.HttpServlet.service(HttpServlet.java:641) javax.servlet.http.HttpServlet.service(HttpServlet.java:722) com.phei.action.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:25) root cause java.sql.SQLException: Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate() or Connection.prepareStatement(). com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927) com.mysql.jdbc.StatementImpl.getGeneratedKeys(StatementImpl.java:1912) org.apache.commons.dbcp.DelegatingStatement.getGeneratedKeys(DelegatingStatement.java:315) org.apache.commons.dbcp.DelegatingStatement.getGeneratedKeys(DelegatingStatement.java:315) com.phei.dao.PersonDao.addPerson(PersonDao.java:33) com.phei.action.PersonAction.add(PersonAction.java:49) com.phei.action.PersonAction.execute(PersonAction.java:29) org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431) org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236) org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) javax.servlet.http.HttpServlet.service(HttpServlet.java:641) javax.servlet.http.HttpServlet.service(HttpServlet.java:722) com.phei.action.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:25) note The full stack trace of the root cause is available in the Apache Tomcat/7.0.16 logs.
If somebody can help me solve the problem, I would be very grateful!
struction.jpg
the construction of project
vipul bondugula
Ranch Hand
Joined: Oct 14, 2010
Posts: 218
posted
Jul 18, 2011 22:51:46
0
Hi Jones,
You Used
PreparedStatement
getGeneratedKeys() which returns
ResultSet
object.
ResultSet
Need to be checked before using it. I mean before using
ResultSet
object you need to check whether data is exist or not.
Vipul.
Thanks
Vipul Kumar
I agree. Here's the link:
http://aspose.com/file-tools
subject: A issue in Struts1.x
Similar Threads
Need immediate help, my job is stuck
<hmtl:checkbox>problem
Struts Validation Empty alert Box
problem in logic:iterate
Help with jsp beans
All times are in JavaRanch time: GMT-6 in summer, GMT-7 in winter