Hi, I'm experimenting a simple form, adding a group (3 fields) to a simple, one group table database, following some examples from the Struts book by James Turner. All classes built (with Torque and mysql) and deployed. I couldn't bring up the form and kept getting the error below. I think something is wrong w/ my struts setup. Attached are struts config, my jsp, and some simple java files. Could someone help me on this ? I really appreciate it.
-Frank Error: 500 Location: /infolink/users/edit_group.jsp Internal Servlet Error: javax.servlet.ServletException: No getter method for property group_name of bean org.apache.struts.taglib.html.BEAN at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImp l.java:460) at users.edit_group_1._jspService(edit_group_1.java:550) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:119) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.tomcat.facade.ServletHandler.doService(ServletHandler.java:574) at org.apache.tomcat.core.Handler.invoke(Handler.java:322) at org.apache.tomcat.core.Handler.service(Handler.java:235) at org.apache.tomcat.facade.ServletHandler.service(ServletHandler.java:485) at org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:91 7) at org.apache.tomcat.core.ContextManager.service(ContextManager.java:833) at org.apache.tomcat.modules.server.Http10Interceptor.processConnection(Http10I nterceptor.java:176) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:494) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.jav a:516) at java.lang.Thread.run(Thread.java:536) Root cause: javax.servlet.jsp.JspException: No getter method for property group_name of bean org.apache.struts.taglib.html.BEAN at org.apache.struts.util.RequestUtils.lookup(RequestUtils.java:742) at org.apache.struts.taglib.html.BaseFieldTag.doStartTag(BaseFieldTag.java:193) at users.edit_group_1._jspService(edit_group_1.java:241) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:119) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.tomcat.facade.ServletHandler.doService(ServletHandler.java:574) at org.apache.tomcat.core.Handler.invoke(Handler.java:322) at org.apache.tomcat.core.Handler.service(Handler.java:235) at org.apache.tomcat.facade.ServletHandler.service(ServletHandler.java:485) at org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:91 7) at org.apache.tomcat.core.ContextManager.service(ContextManager.java:833) at org.apache.tomcat.modules.server.Http10Interceptor.processConnection(Http10I nterceptor.java:176) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:494) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.jav a:516) at java.lang.Thread.run(Thread.java:536)
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"> <!-- This is the Struts configuration file for the "Group!" sample application --> <struts-config> <!-- ======== Form Bean Definitions =================================== --> <form-beans> <form-bean name="GroupForm" type="infolink.users.GroupForm"/> <form-property name="group_name" type="java.lang.String"/> </form-beans> <!-- ========== Action Mapping Definitions ============================== --> <action-mappings> <!-- Say Hello! --> <action path = "/Group" type = "infolink.users.GroupAction" name = "GroupForm" scope = "request" validate = "true" input = "/edit_group.jsp" > <forward name="home" path="/view_groups.jsp" /> </action> </action-mappings> <!-- ========== Message Resources Definitions =========================== --> <message-resources parameter="infolink.users.ApplicationResources"/> </struts-config>
package infolink.users; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.*; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionError; import org.apache.struts.action.Action; import org.apache.torque.*; /** * stocktrack.struts.action.NewUserAction class. * this class used by Struts Framework process the * stocktrack.struts.form.NewUserForm form. * - method invoked by HTTP request is perform(....) * - form name is newUserForm * - input page is newUser.jsp * - scope name is request * - path for this action is /newuser * * struts-config declaration: * <action name="newUserForm" * path="/newuser" * type="stocktrack.struts.action.NewUserAction" * input="newUser.jsp" * scope="request" * validate="true" > * <!-- yours forwards --> * </action> * * @see org.apache.struts.action.Action org.apache.struts.action.Action * Generated by StrutsWizard. */ public class GroupAction extends org.apache.struts.action.Action { public ActionForward perform(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { GroupForm gf = (GroupForm) form; try { Group g = Group.findGroupByName(gf.getGroupName()); if (g != null) { ActionErrors errors = new ActionErrors(); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("group.newgroup.duplicate.group")); this.saveErrors(request, errors); return mapping.getInputForward(); } g = new Group(); g.setGroupName(gf.getGroupName()); g.setGroupDesc(gf.getGroupDesc()); g.setGroupStatus(gf.getGroupStatus()); g.save(); request.getSession().setAttribute(Constants.GROUP_KEY, g); return mapping.findForward("home"); } catch (Exception ex) { ex.printStackTrace(); return mapping.findForward("error"); } } }
package infolink.users; import javax.servlet.http.*; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import org.apache.torque.*; public final class GroupForm extends ActionForm { /** * The value for the group_id field */ private int group_id; /** * The value for the group_name field */ private String group_name; /** * The value for the group_desc field */ private String group_desc; /** * The value for the group_status field */ private int group_status; public void reset(ActionMapping mapping, HttpServletRequest request) { this.group_id = 0; this.group_name = ""; this.group_desc = "";; this.group_status = 0; } /** * Validate the properties posted in this request. If validation errors are * found, return an <code>ActionErrors</code> object containing the errors. * If no validation errors occur, return <code>null</code> or an empty * <code>ActionErrors</code> object. * * @param mapping The current mapping (from struts-config.xml) * @param request The servlet request object */ public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors(); if ((group_name == null) || (group_name.length() < 1)) errors.add("group_name", new ActionError("infolink.group.no.name.error")); return errors; } /** * Get the GroupId * * @return int */ public int getGroupId() { return group_id; } /** * Set the value of GroupId * * @param v new value */ public void setGroupId(int v) { if (this.group_id != v) { this.group_id = v; } } /** * Get the GroupName * * @return String */ public String getGroupName() { return group_name; } /** * Set the value of GroupName * * @param v new value */ public void setGroupName(String v) { this.group_name = v; } /** * Get the GroupDesc * * @return String */ public String getGroupDesc() { return group_desc; } /** * Set the value of GroupDesc * * @param v new value */ public void setGroupDesc(String v) { this.group_desc = v; } /** * Get the GroupStatus * * @return int */ public int getGroupStatus() { return group_status; } /** * Set the value of GroupStatus * * @param v new value */ public void setGroupStatus(int v) { if (this.group_status != v) { this.group_status = v; } } }
package org.apache.torque; import java.util.List; import org.apache.torque.*; import org.apache.torque.om.Persistent; import org.apache.torque.util.Criteria; /** * The skeleton for this class was autogenerated by Torque on: * * [Thu Jan 15 16:11:08 PST 2004] * * You should add additional methods to this class to meet the * application requirements. This class will only be generated as * long as it does not already exist in the output directory. */ public class Group extends org.apache.torque.BaseGroup implements Persistent { public static Group findGroupByName (String name) { try { Criteria c = new Criteria(); c.add (GroupPeer.GROUP_NAME, name); List l = GroupPeer.doSelect(c); if ((l == null) || (l.size() == 0)) return null; return (Group)l.get(0); } catch (Exception e) { e.printStackTrace(); return null; } } }
package org.apache.torque; /** * The skeleton for this class was autogenerated by Torque on: * * [Thu Jan 15 16:11:08 PST 2004] * * You should add additional methods to this class to meet the * application requirements. This class will only be generated as * long as it does not already exist in the output directory. */ public class GroupPeer extends org.apache.torque.BaseGroupPeer { }
package org.apache.torque; import java.math.BigDecimal; import java.sql.Connection; import java.util.ArrayList; import java.util.Date; import java.util.Collections; import java.util.List; import org.apache.commons.lang.ObjectUtils; import org.apache.torque.TorqueException; import org.apache.torque.om.BaseObject; import org.apache.torque.om.ComboKey; import org.apache.torque.om.DateKey; import org.apache.torque.om.NumberKey; import org.apache.torque.om.ObjectKey; import org.apache.torque.om.SimpleKey; import org.apache.torque.om.StringKey; import org.apache.torque.om.Persistent; import org.apache.torque.util.Criteria; import org.apache.torque.util.Transaction; /** * This class was autogenerated by Torque on: * * [Thu Jan 22 07:47:19 PST 2004] * * You should not use this class directly. It should not even be * extended all references should be to Group */ public abstract class BaseGroup extends BaseObject { /** The Peer class */ private static final GroupPeer peer = new GroupPeer(); /** * The value for the group_id field */ private NumberKey group_id; /** * The value for the group_name field */ private String group_name; /** * The value for the group_desc field */ private String group_desc; /** * The value for the group_status field */ private int group_status; /** * Get the GroupId * * @return NumberKey */ public NumberKey getGroupId() { return group_id; } /** * Set the value of GroupId * * @param v new value */ public void setGroupId(NumberKey v) { if (v != null && v.getValue() == null) { // If this is an Objectkey than this set method is // probably storing the id of this object or some // associated object. If the objectKey value is null // then we convert the parameter to null so that this // property is consistently null to indicate that no // object is associated or defined. v = null; } if (!ObjectUtils.equals(this.group_id, v)) { this.group_id = v; setModified(true); } } /** * Set the value of GroupId as a string. * * @param v new value */ public void setGroupId(String v) { setGroupId(new NumberKey(v)); } /** * Get the GroupName * * @return String */ public String getGroupName() { return group_name; } /** * Set the value of GroupName * * @param v new value */ public void setGroupName(String v) { if (!ObjectUtils.equals(this.group_name, v)) { this.group_name = v; setModified(true); } } /** * Get the GroupDesc * * @return String */ public String getGroupDesc() { return group_desc; } /** * Set the value of GroupDesc * * @param v new value */ public void setGroupDesc(String v) { if (!ObjectUtils.equals(this.group_desc, v)) { this.group_desc = v; setModified(true); } } /** * Get the GroupStatus * * @return int */ public int getGroupStatus() { return group_status; } /** * Set the value of GroupStatus * * @param v new value */ public void setGroupStatus(int v) { if (this.group_status != v) { this.group_status = v; setModified(true); } } private static List fieldNames = null; /** * Generate a list of field names. */ public static synchronized List getFieldNames() { if (fieldNames == null) { fieldNames = new ArrayList(); fieldNames.add("GroupId"); fieldNames.add("GroupName"); fieldNames.add("GroupDesc"); fieldNames.add("GroupStatus"); fieldNames = Collections.unmodifiableList(fieldNames); } return fieldNames; } /** * Retrieves a field from the object by name passed in * as a String. */ public Object getByName(String name) { if (name.equals("GroupId")) { return getGroupId(); } if (name.equals("GroupName")) { return getGroupName(); } if (name.equals("GroupDesc")) { return getGroupDesc(); } if (name.equals("GroupStatus")) { return new Integer(getGroupStatus()); } return null; } /** * Retrieves a field from the object by name passed in * as a String. The String must be one of the static * Strings defined in this Class' Peer. */ public Object getByPeerName(String name) { if (name.equals(GroupPeer.GROUP_ID )) { return getGroupId(); } if (name.equals(GroupPeer.GROUP_NAME )) { return getGroupName(); } if (name.equals(GroupPeer.GROUP_DESC )) { return getGroupDesc(); } if (name.equals(GroupPeer.GROUP_STATUS )) { return new Integer(getGroupStatus()); } return null; } /** * Retrieves a field from the object by Position as specified * in the xml schema. Zero-based. */ public Object getByPosition(int pos) { if (pos == 0) { return getGroupId(); } if (pos == 1) { return getGroupName(); } if (pos == 2) { return getGroupDesc(); } if (pos == 3) { return new Integer(getGroupStatus()); } return null; } /** * Stores the object in the database. If the object is new, * it inserts it; otherwise an update is performed. */ public void save() throws Exception { save(GroupPeer.getMapBuilder() .getDatabaseMap().getName()); } /** * Stores the object in the database. If the object is new, * it inserts it; otherwise an update is performed. * Note: this code is here because the method body is * auto-generated conditionally and therefore needs to be * in this file instead of in the super class, BaseObject. */ public void save(String dbName) throws TorqueException { Connection con = null; try { con = Transaction.begin(dbName); save(con); Transaction.commit(con); } catch(TorqueException e) { Transaction.safeRollback(con); throw e; } } /** flag to prevent endless save loop, if this object is referenced by another object which falls in this transaction. */ private boolean alreadyInSave = false; /** * Stores the object in the database. If the object is new, * it inserts it; otherwise an update is performed. This method * is meant to be used as part of a transaction, otherwise use * the save() method and the connection details will be handled * internally */ public void save(Connection con) throws TorqueException { if (!alreadyInSave) { alreadyInSave = true; // If this object has been modified, then save it to the database. if (isModified()) { if (isNew()) { GroupPeer.doInsert((Group) this, con); setNew(false); } else { GroupPeer.doUpdate((Group) this, con); } } alreadyInSave = false; } } /** * Set the PrimaryKey using ObjectKey. * * @param group_id ObjectKey */ public void setPrimaryKey(ObjectKey group_id) { setGroupId((NumberKey)group_id); } /** * Set the PrimaryKey using a String. */ public void setPrimaryKey(String key) { setGroupId(new NumberKey(key) ); } /** * returns an id that differentiates this object from others * of its class. */ public ObjectKey getPrimaryKey() { return getGroupId(); } /** * Makes a copy of this object. * It creates a new object filling in the simple attributes. * It then fills all the association collections and sets the * related objects to isNew=true. */ public Group copy() throws TorqueException { return copyInto(new Group()); } protected Group copyInto(Group copyObj) throws TorqueException { copyObj.setGroupId(group_id); copyObj.setGroupName(group_name); copyObj.setGroupDesc(group_desc); copyObj.setGroupStatus(group_status); copyObj.setNew(false); copyObj.setNew(true); copyObj.setGroupId((NumberKey)null); return copyObj; } /** * returns a peer instance associated with this om. Since Peer classes * are not to have any instance attributes, this method returns the * same instance for all member of this class. The method could therefore * be static, but this would prevent one from overriding the behavior. */ public GroupPeer getPeer() { return peer; } }
package org.apache.torque; import java.sql.Connection; import java.sql.SQLException; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import org.apache.torque.Torque; import org.apache.torque.TorqueException; import org.apache.torque.map.MapBuilder; import org.apache.torque.map.TableMap; import org.apache.torque.om.NumberKey; import org.apache.torque.om.StringKey; import org.apache.torque.om.ObjectKey; import org.apache.torque.om.SimpleKey; import org.apache.torque.util.BasePeer; import org.apache.torque.util.Criteria; import com.workingdogs.village.DataSetException; import com.workingdogs.village.QueryDataSet; import com.workingdogs.village.Record; // Local classes import org.apache.torque.map.*; /** * This class was autogenerated by Torque on: * * [Thu Jan 22 07:47:19 PST 2004] * */ public abstract class BaseGroupPeer extends BasePeer { /** the default database name for this class */ public static final String DATABASE_NAME = "infolink"; /** the table name for this class */ public static final String TABLE_NAME = "group"; /** * @return the map builder for this peer */ public static MapBuilder getMapBuilder() throws TorqueException { return getMapBuilder(GroupMapBuilder.CLASS_NAME); } /** the column name for the GROUP_ID field */ public static final String GROUP_ID; /** the column name for the GROUP_NAME field */ public static final String GROUP_NAME; /** the column name for the GROUP_DESC field */ public static final String GROUP_DESC; /** the column name for the GROUP_STATUS field */ public static final String GROUP_STATUS; static { GROUP_ID = "group.GROUP_ID"; GROUP_NAME = "group.GROUP_NAME"; GROUP_DESC = "group.GROUP_DESC"; GROUP_STATUS = "group.GROUP_STATUS"; if (Torque.isInit()) { try { getMapBuilder(); } catch (Exception e) { category.error("Could not initialize Peer", e); } } else { Torque.registerMapBuilder(GroupMapBuilder.CLASS_NAME); } } /** number of columns for this peer */ public static final int numColumns = 4; /** A class that can be returned by this peer. */ protected static final String CLASSNAME_DEFAULT = "org.apache.torque.Group"; /** A class that can be returned by this peer. */ protected static final Class CLASS_DEFAULT = initClass(CLASSNAME_DEFAULT); /** Class object initialization method. */ private static Class initClass(String className) { Class c = null; try { c = Class.forName(className); } catch (Throwable t) { category.error("A FATAL ERROR has occurred which should not " + "have happened under any circumstance. Please notify " + "the Turbine developers <[EMAIL PROTECTED]> " + "and give as many details as possible (including the error " + "stack trace).", t); // Error objects should always be propogated. if (t instanceof Error) { throw (Error) t.fillInStackTrace(); } } return c; } /** * Get the list of objects for a ResultSet. Please not that your * resultset MUST return columns in the right order. You can use * getFieldNames() in BaseObject to get the correct sequence. */ public static List resultSet2Objects(java.sql.ResultSet results) throws TorqueException { try { QueryDataSet qds = null; List rows = null; try { qds = new QueryDataSet(results); rows = getSelectResults(qds); } finally { if (qds != null) { qds.close(); } } return populateObjects(rows); } catch (SQLException e) { throw new TorqueException(e); } catch (DataSetException e) { throw new TorqueException(e); } } /** * Method to do inserts */ public static ObjectKey doInsert(Criteria criteria) throws TorqueException { return BaseGroupPeer .doInsert(criteria, (Connection) null); } /** * Method to do inserts. This method is to be used during a transaction, * otherwise use the doInsert(Criteria) method. It will take care of * the connection details internally. */ public static ObjectKey doInsert(Criteria criteria, Connection con) throws TorqueException { // Set the correct dbName if it has not been overridden // criteria.getDbName will return the same object if not set to // another value so == check is okay and faster if (criteria.getDbName() == Torque.getDefaultDB()) { criteria.setDbName(DATABASE_NAME); } if (con == null) { return BasePeer.doInsert(criteria); } else { return BasePeer.doInsert(criteria, con); } } /** Add all the columns needed to create a new object */ public static void addSelectColumns(Criteria criteria) throws TorqueException { criteria.addSelectColumn(GROUP_ID); criteria.addSelectColumn(GROUP_NAME); criteria.addSelectColumn(GROUP_DESC); criteria.addSelectColumn(GROUP_STATUS); } /** * Create a new object of type cls from a resultset row starting * from a specified offset. This is done so that you can select * other rows than just those needed for this object. You may * for example want to create two objects from the same row. */ public static Group row2Object(Record row, int offset, Class cls) throws TorqueException { try { Group obj = (Group) cls.newInstance(); populateObject(row, offset, obj); obj.setModified(false); obj.setNew(false); return obj; } catch (InstantiationException e) { throw new TorqueException(e); } catch (IllegalAccessException e) { throw new TorqueException(e); } } /** * Populates an object from a resultset row starting * from a specified offset. This is done so that you can select * other rows than just those needed for this object. You may * for example want to create two objects from the same row. */ public static void populateObject(Record row, int offset, Group obj) throws TorqueException { try { if (row.getValue(offset + 0).asBigDecimal() instanceof Object) { if (null == row.getValue(offset + 0).asBigDecimal()) { obj.setGroupId((NumberKey) null); } else { obj.setGroupId( new NumberKey(row.getValue(offset + 0).asBigDecimal())); } } obj.setGroupName(row.getValue(offset + 1).asString()); obj.setGroupDesc(row.getValue(offset + 2).asString()); obj.setGroupStatus(row.getValue(offset + 3).asInt()); } catch (DataSetException e) { throw new TorqueException(e); } } /** Method to do selects */ public static List doSelect(Criteria criteria) throws TorqueException { return populateObjects(doSelectVillageRecords(criteria)); } /** Method to do selects within a transaction */ public static List doSelect(Criteria criteria, Connection con) throws TorqueException { return populateObjects(doSelectVillageRecords(criteria, con)); } /** * Grabs the raw Village records to be formed into objects. * This method handles connections internally. The Record objects * returned by this method should be considered readonly. Do not * alter the data and call save(), your results may vary, but are * certainly likely to result in hard to track MT bugs. */ public static List doSelectVillageRecords(Criteria criteria) throws TorqueException { return BaseGroupPeer .doSelectVillageRecords(criteria, (Connection) null); } /** * Grabs the raw Village records to be formed into objects. * This method should be used for transactions */ public static List doSelectVillageRecords(Criteria criteria, Connection con) throws TorqueException { if (criteria.getSelectColumns().size() == 0) { addSelectColumns(criteria); } // Set the correct dbName if it has not been overridden // criteria.getDbName will return the same object if not set to // another value so == check is okay and faster if (criteria.getDbName() == Torque.getDefaultDB()) { criteria.setDbName(DATABASE_NAME); } // BasePeer returns a List of Value (Village) arrays. The array // order follows the order columns were placed in the Select clause. if (con == null) { return BasePeer.doSelect(criteria); } else { return BasePeer.doSelect(criteria, con); } } /** * The returned List will contain objects of the default type or * objects that inherit from the default. */ public static List populateObjects(List records) throws TorqueException { List results = new ArrayList(records.size()); // populate the object(s) for (int i = 0; i < records.size(); i++) { Record row = (Record) records.get(i); results.add(GroupPeer.row2Object(row, 1, GroupPeer.getOMClass())); } return results; } /** * The class that the Peer will make instances of. * If the BO is abstract then you must implement this method * in the BO. */ public static Class getOMClass() throws TorqueException { return CLASS_DEFAULT; } /** * Method to do updates. * * @param criteria object containing data that is used to create the UPDATE * statement. */ public static void doUpdate(Criteria criteria) throws TorqueException { BaseGroupPeer .doUpdate(criteria, (Connection) null); } /** * Method to do updates. This method is to be used during a transaction, * otherwise use the doUpdate(Criteria) method. It will take care of * the connection details internally. * * @param criteria object containing data that is used to create the UPDATE * statement. * @param dbCon the connection to use */ public static void doUpdate(Criteria criteria, Connection con) throws TorqueException { Criteria selectCriteria = new Criteria(DATABASE_NAME, 2); selectCriteria.put(GROUP_ID, criteria.remove(GROUP_ID)); // Set the correct dbName if it has not been overridden // criteria.getDbName will return the same object if not set to // another value so == check is okay and faster if (criteria.getDbName() == Torque.getDefaultDB()) { criteria.setDbName(DATABASE_NAME); } if (con == null) { BasePeer.doUpdate(selectCriteria, criteria); } else { BasePeer.doUpdate(selectCriteria, criteria, con); } } /** * Method to do deletes. * * @param criteria object containing data that is used DELETE from database. */ public static void doDelete(Criteria criteria) throws TorqueException { BaseGroupPeer .doDelete(criteria, (Connection) null); } /** * Method to do deletes. This method is to be used during a transaction, * otherwise use the doDelete(Criteria) method. It will take care of * the connection details internally. * * @param criteria object containing data that is used DELETE from database. * @param dbCon the connection to use */ public static void doDelete(Criteria criteria, Connection con) throws TorqueException { // Set the correct dbName if it has not been overridden // criteria.getDbName will return the same object if not set to // another value so == check is okay and faster if (criteria.getDbName() == Torque.getDefaultDB()) { criteria.setDbName(DATABASE_NAME); } if (con == null) { BasePeer.doDelete(criteria); } else { BasePeer.doDelete(criteria, con); } } /** Method to do selects */ public static List doSelect(Group obj) throws TorqueException { return doSelect(buildCriteria(obj)); } /** Method to do inserts */ public static void doInsert(Group obj) throws TorqueException { obj.setPrimaryKey(doInsert(buildCriteria(obj))); obj.setNew(false); obj.setModified(false); } /** * @param obj the data object to update in the database. */ public static void doUpdate(Group obj) throws TorqueException { doUpdate(buildCriteria(obj)); obj.setModified(false); } /** * @param obj the data object to delete in the database. */ public static void doDelete(Group obj) throws TorqueException { doDelete(buildCriteria(obj)); } /** * Method to do inserts. This method is to be used during a transaction, * otherwise use the doInsert(Group) method. It will take * care of the connection details internally. * * @param obj the data object to insert into the database. */ public static void doInsert(Group obj, Connection con) throws TorqueException { obj.setPrimaryKey(doInsert(buildCriteria(obj), con)); obj.setNew(false); obj.setModified(false); } /** * Method to do update. This method is to be used during a transaction, * otherwise use the doUpdate(Group) method. It will take * care of the connection details internally. * * @param obj the data object to update in the database. */ public static void doUpdate(Group obj, Connection con) throws TorqueException { doUpdate(buildCriteria(obj), con); obj.setModified(false); } /** * Method to delete. This method is to be used during a transaction, * otherwise use the doDelete(Group) method. It will take * care of the connection details internally. * * @param obj the data object to delete in the database. */ public static void doDelete(Group obj, Connection con) throws TorqueException { doDelete(buildCriteria(obj), con); } /** Build a Criteria object from the data object for this peer */ public static Criteria buildCriteria( Group obj ) { Criteria criteria = new Criteria(DATABASE_NAME); if (!obj.isNew()) criteria.add(GROUP_ID, obj.getGroupId()); criteria.add(GROUP_NAME, obj.getGroupName()); criteria.add(GROUP_DESC, obj.getGroupDesc()); criteria.add(GROUP_STATUS, obj.getGroupStatus()); return criteria; } /** * Retrieve a single object by pk * * @param pk the primary key */ public static Group retrieveByPK(ObjectKey pk) throws TorqueException { Connection db = null; Group retVal = null; try { db = Torque.getConnection(DATABASE_NAME); retVal = retrieveByPK(pk, db); } finally { Torque.closeConnection(db); } return(retVal); } /** * Retrieve a single object by pk * * @param pk the primary key * @param con the connection to use */ public static Group retrieveByPK(ObjectKey pk, Connection con) throws TorqueException { Criteria criteria = new Criteria(); criteria.add(GROUP_ID, pk); List v = doSelect(criteria, con); if (v.size() != 1) { throw new TorqueException("Failed to select one and only one row."); } else { return (Group)v.get(0); } } /** * Retrieve a multiple objects by pk * * @param pks List of primary keys */ public static List retrieveByPKs(List pks) throws TorqueException { Connection db = null; List retVal = null; try { db = Torque.getConnection(DATABASE_NAME); retVal = retrieveByPKs(pks, db); } finally { Torque.closeConnection(db); } return(retVal); } /** * Retrieve a multiple objects by pk * * @param pks List of primary keys * @param dbcon the connection to use */ public static List retrieveByPKs( List pks, Connection dbcon ) throws TorqueException { List objs = null; if (pks == null || pks.size() == 0) { objs = new LinkedList(); } else { Criteria criteria = new Criteria(); criteria.addIn( GROUP_ID, pks ); objs = doSelect(criteria, dbcon); } return objs; } /** * Returns the TableMap related to this peer. This method is not * needed for general use but a specific application could have a * need. */ protected static TableMap getTableMap() throws TorqueException { return Torque.getDatabaseMap(DATABASE_NAME).getTable(TABLE_NAME); } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]