WCS学习笔记(第九天) - MyNewControllerCmd整合Bonus entity bean
来源:互联网 发布:化境云计算 编辑:程序博客网 时间:2024/06/05 15:45
1. 修改BonusDataBean.java实现:
/// Section 1 ///////////////////////////////////////////////// create fields and accessors (setter/getter methods) private java.lang.String userId; private java.lang.Integer totalBonusPoints; public java.lang.String getUserId() { return userId; } public void setUserId(java.lang.String newUserId) { userId = newUserId; /////////////////////////////////////// /// Section A : instantiate BonusAccessbean if (userId != null) this.setInitKey_memberId(new Long(newUserId)); /////////////////////////////////////// } public java.lang.Integer getTotalBonusPoints() { return totalBonusPoints; } public void setTotalBonusPoints(java.lang.Integer newTotalBonusPoints) { totalBonusPoints= newTotalBonusPoints; } //// End of section 1 ////////////////////////////////////////////
b. 创建BonusDataBean(BonusAccessBean bb)方法:
/// Section 2///////////////////////////////////////////////// create a new constructor for passing access bean into databean // so that JSP can work with the access beanpublic BonusDataBean(BonusAccessBean bb) throws com.ibm.commerce.exception.ECException { try { super.setEJBRef(bb.getEJBRef()); } catch (javax.ejb.FinderException e) { throw new ECSystemException(ECMessage._ERR_CREATE_EXCEPTION, "BonusDataBean", "BonusDataBean(bb)"); } catch (javax.naming.NamingException e) { throw new ECSystemException(ECMessage._ERR_NAMING_EXCEPTION, "BonusDataBean", "BonusDataBean(bb)"); } catch (java.rmi.RemoteException e) { throw new ECSystemException(ECMessage._ERR_REMOTE_EXCEPTION, "BonusDataBean", "BonusDataBean(bb)"); } catch (javax.ejb.CreateException e) { throw new ECSystemException(ECMessage._ERR_CREATE_EXCEPTION, "BonusDataBean", "BonusDataBean(bb)"); }}//// End of section 2 ////////////////////////////////////////////
c. 具体实现populate()方法体
//// Section 3 /////////////////////////////////////////////////// set additional data field that is used for instantiating BonusAccessbean try { setUserId(getRequestProperties().getString("taskOutputUserId")); try { super.refreshCopyHelper(); } catch (javax.ejb.FinderException e) { throw new ECSystemException(ECMessage._ERR_CREATE_EXCEPTION, "BonusDataBean", "populate"); } catch (javax.naming.NamingException e) { throw new ECSystemException(ECMessage._ERR_NAMING_EXCEPTION, "BonusDataBean", "populate"); } catch (java.rmi.RemoteException e) { throw new ECSystemException(ECMessage._ERR_REMOTE_EXCEPTION, "BonusDataBean", "populate"); } catch (javax.ejb.CreateException e) { throw new ECSystemException(ECMessage._ERR_CREATE_EXCEPTION, "BonusDataBean", "populate"); } } catch (ParameterNotFoundException e){}///// End of Section 3 /////////////////////////////////////////}
d. 具体实现setRequestProperties(com.ibm.commerce.datatype.TypedProperty aParam)方法体
/// Section 4 ///////////////////////////////////////////// copy input TypedProperties to local requestProperties = aParam;/// End of section 4 ////////////////////////////////////
2. 修改MyNewTaskCmd.java接口代码:
a. 打开
.javab. 导入BonusAccessBean
/// Import section 2 /////////////////////////////////////import com.ibm.commerce.extension.objects.BonusAccessBean;/// End of import section 2 //////////////////////////////
c. 增加接口方法
/// Section 4 //////////////////////////////////////////////// public java.lang.Integer getOldBonusPoints(); public Integer getTotalBonusPoints(); public void setBonusAccessBean(BonusAccessBean bb); public BonusAccessBean getBonusAccessBean(); /// End of section 4//////////////////////////////////////////
3. 修改MyNewTaskCmdImpl.java接口代码实现:
a. 打开
.javab. 导入BonusAccessBean
/// Import section 2 //////////////////////////////////////import com.ibm.commerce.extension.objects.BonusAccessBean;/// End of Import section 2 ///////////////////////////////
c. 声明并实现set、get方法
//// Section 3A ////////////////////////////////////////////// private java.lang.Integer oldBonusPoints; private java.lang.Integer totalBonusPoints; private BonusAccessBean bb = null;////End of Section 3A ///////////////////////////////////////////// Section 3B ////////////////////////////////////////////// public void setBonusAccessBean(BonusAccessBean newBB) { bb = newBB; } public BonusAccessBean getBonusAccessBean(){ return bb; } public java.lang.Integer getOldBonusPoints() { return oldBonusPoints; } public Integer getTotalBonusPoints(){ return totalBonusPoints; } /// End of section 3B ///////////////////////////////////////////
d. 增加validateParameters方法代码实现
// section 2 ///////////////////////////////////////////////////// try { oldBonusPoints = bb.getBonusPoint(); } catch (javax.ejb.FinderException e) { try { // If bb is null, create a new instance short optCounter=(short)0; bb = new BonusAccessBean(new Long(foundUserId), new Integer(0), optCounter); oldBonusPoints = new Integer(0); } catch (javax.ejb.CreateException ec) { throw new ECSystemException(ECMessage._ERR_CREATE_EXCEPTION, this.getClass().getName(), "validateParameters"); } catch (javax.naming.NamingException ec) { throw new ECSystemException(ECMessage._ERR_NAMING_EXCEPTION, this.getClass().getName(), "validateParameters"); } catch (java.rmi.RemoteException ec) { throw new ECSystemException(ECMessage._ERR_REMOTE_EXCEPTION, this.getClass().getName(), "validateParameters"); } } catch (javax.naming.NamingException e) { throw new ECSystemException(ECMessage._ERR_NAMING_EXCEPTION, this.getClass().getName(), "validateParameters"); } catch (java.rmi.RemoteException e) { throw new ECSystemException(ECMessage._ERR_REMOTE_EXCEPTION, this.getClass().getName(), "validateParameters"); } catch (javax.ejb.CreateException e) { throw new ECSystemException(ECMessage._ERR_CREATE_EXCEPTION, this.getClass().getName(), "validateParameters"); } // end of section 2 ///////////////////////////////////////////////
e. 增加performExecute方法代码实现
/// Section 2 ////////////////////////////////////////////////////// use BonusAccessBean to update new bonus point int newBP = oldBonusPoints.intValue() + getInputPoints().intValue(); totalBonusPoints = new Integer (newBP); bb.setBonusPoint(totalBonusPoints) ; try { bb.commitCopyHelper(); } catch (javax.ejb.FinderException e) { throw new ECSystemException(ECMessage._ERR_FINDER_EXCEPTION, this.getClass().getName(), "performExecute"); } catch (javax.naming.NamingException e) { throw new ECSystemException(ECMessage._ERR_NAMING_EXCEPTION, this.getClass().getName(), "performExecute"); } catch (java.rmi.RemoteException e) { throw new ECSystemException(ECMessage._ERR_REMOTE_EXCEPTION, this.getClass().getName(), "performExecute"); } catch (javax.ejb.CreateException e) { throw new ECSystemException(ECMessage._ERR_CREATE_EXCEPTION, this.getClass().getName(), "performExecute"); }/// End of section 2 ////////////////////////////////////////////
4. 修改MyNewControllerCmdImpl.java控制器代码实现:
a. 打开
.javab. 增加参数
/// Section 3 /////////////////////////////////////////////////// Create an instance variable of type AccessVector to hold /// the resources and a BonusAccessBean instance variable for /// access control purposes. private AccessVector resources = null; private BonusAccessBean bb = null;/// End of Section 3 /////////////////////////////////////////
c. 增加getResources()方法实现
/// AccessControl Section ////////////////////////////////////public AccessVector getResources() throws ECException{ if (resources == null ) { /// use UserRegistryAccessBean to check user reference number String refNum = null; String methodName = "getResources"; rrb = new UserRegistryAccessBean(); try { rrb = rrb.findByUserLogonId(getUserName()); refNum = rrb.getUserId(); } catch (javax.ejb.FinderException e) { throw new ECSystemException(ECMessage._ERR_FINDER_EXCEPTION, this.getClass().getName(),methodName,e); } catch (javax.naming.NamingException e) { throw new ECSystemException(ECMessage._ERR_NAMING_EXCEPTION, this.getClass().getName(), methodName,e); } catch (java.rmi.RemoteException e) { throw new ECSystemException(ECMessage._ERR_REMOTE_EXCEPTION, this.getClass().getName(), methodName,e); } catch (javax.ejb.CreateException e) { throw new ECSystemException(ECMessage._ERR_CREATE_EXCEPTION, this.getClass().getName(), methodName,e); } /// find the bonus bean for this registered user bb = new com.ibm.commerce.extension.objects.BonusAccessBean(); try { if (refNum != null) { bb.setInitKey_memberId(new Long(refNum)); bb.refreshCopyHelper(); resources = new AccessVector(bb); } } catch (javax.ejb.FinderException e) { //We don't have a bonus object so return the container that will hold the //bonus object when it's createdUserAccessBean uab = new UserAccessBean();uab.setInitKey_MemberId(refNum);resources = new AccessVector(uab);return resources; } catch (javax.naming.NamingException e) { throw new ECSystemException(ECMessage._ERR_NAMING_EXCEPTION, this.getClass().getName(), methodName); } catch (java.rmi.RemoteException e) { throw new ECSystemException(ECMessage._ERR_REMOTE_EXCEPTION, this.getClass().getName(), methodName); } catch (javax.ejb.CreateException e) { throw new ECSystemException(ECMessage._ERR_CREATE_EXCEPTION, this.getClass().getName(), methodName); } } return resources;}/// End of AccessControl Section //////////////////////////////////
d. 修改performExecute方法
// Section 4E /////////////////////////////////////// pass bb instance variable to the task command cmd.setBonusAccessBean(bb);// End of section 4E /////////////////////////////// Section 4G ///////////////////////////////////////if (cmd.getOldBonusPoints() != null) { rspProp.put("oldBonusPoints", cmd.getOldBonusPoints());}// End of section 4G /////////////////////////////// Section 4H //////////////////////////////////////////Instantiate the bonus data bean , then put it to response properties BonusDataBean bdb = new com.ibm.commerce.sample.databeans.BonusDataBean( cmd.getBonusAccessBean()); rspProp.put("bdbInstance", bdb );// End of section 4H ////////////////////////////////
5. 确认商店(如:Madisons)的对应会员ID:
a. 启动wcs服务器;
b. IE打开:URL: http://localhost/webapp/wcs/admin/servlet/db.jsp;
c. 查询sql:
select member_id from storeent where storeent_id=10051;
b. 编写SampleACPolicy.xml 和 SampleACPolicy_en_US.xml 放在 WCDE_installdir\xml\policies\xml (ConsumerDirectMemberId替换为sql查询的-2003)
SampleACPolicy.xml
<?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?> <!DOCTYPE Policies SYSTEM "../dtd/accesscontrolpolicies.dtd"><Policies> <Action Name="MyNewControllerCmd" CommandName="com.ibm.commerce.sample.commands.MyNewControllerCmd"> </Action> <ResourceCategory Name="com.ibm.commerce.extension.objects.BonusResourceCategory" ResourceBeanClass="com.ibm.commerce.extension.objects.Bonus" > <ResourceAction Name="MyNewControllerCmd"/> </ResourceCategory> <ActionGroup Name="MyNewControllerCmdActionGroup" OwnerID="RootOrganization"><ActionGroupAction Name="MyNewControllerCmd"/> </ActionGroup> <ResourceGroup Name="BonusResourceGroup" OwnerID="RootOrganization" > <ResourceGroupResource Name="com.ibm.commerce.extension.objects.BonusResourceCategory" /> </ResourceGroup> <Policy Name="AllUsersUpdateBonusResourceGroup" OwnerID="-2003" UserGroup="AllUsers" UserGroupOwner="RootOrganization" ActionGroupName="MyNewControllerCmdActionGroup" ResourceGroupName="BonusResourceGroup" RelationName="creator" PolicyType="groupableStandard"> </Policy> <Policy Name="AllUsersExecuteMyNewControllerCmdOnUserResource" OwnerID="-2003" UserGroup="AllUsers" UserGroupOwner="RootOrganization" ActionGroupName="MyNewControllerCmdActionGroup" ResourceGroupName="UserDataResourceGroup" RelationName="owner" PolicyType="groupableStandard"> </Policy> <PolicyGroup Name="ManagementAndAdministrationPolicyGroup" OwnerID="RootOrganization"> <!-- Define policies in this policy group --> <PolicyGroupPolicy Name="AllUsersUpdateBonusResourceGroup" PolicyOwnerID="-2003" /> <PolicyGroupPolicy Name="AllUsersExecuteMyNewControllerCmdOnUserResource" PolicyOwnerID="-2003" /></PolicyGroup></Policies>
<?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?> <!DOCTYPE PoliciesNLS SYSTEM "../dtd/accesscontrolpoliciesnls.dtd"><PoliciesNLS LanguageID="en_US"> <Action_nls ActionName="com.ibm.commerce.sample.commands.MyNewControllerCmd" DisplayName_nls="MyNewControllerCmd" Description_nls="Run MyNewControllerCmd" /> <ActionGroup_nls ActionGroupName="MyNewControllerCmdActionGroup" DisplayName_nls="MyNewControllerCmd Action Group" Description_nls="MyNewControllerCmd Action Group" /> <ResourceCategory_nls ResourceCategoryName="com.ibm.commerce.extension.objects.Bonus" DisplayName_nls="Bonus Resource" Description_nls="Bonus Resource" /> <ResourceGroup_nls ResourceGroupName="BonusResourceGroup" DisplayName_nls="Bonus Resources Group" Description_nls="Bonus Resources" /> <Policy_nls PolicyName="AllUsersUpdateBonusResourceGroup" OwnerID="-2003" DisplayName_nls="All Users Update Bonus Resource Group" Description_nls="All Users Update Bonus Resource Group" /><Policy_nls PolicyName="AllUsersExecuteMyNewControllerCmdOnUserResource" OwnerID="-2003" DisplayName_nls="All Users Execute MyNewControllerCmd On User Resource" Description_nls="All Users Execute MyNewControllerCmd On User Resource" /></PoliciesNLS>
7. 修改JSP页面:
a. 在MyNewJSPTemplate.jsp的SECTION 9中增加下面代码,用于显示bean传递和更新的信息:
<!-- SECTION 9 --><h2><fmt:message key="BonusAdmin" bundle="${tutorial}" /> </h2><c:if test="${!empty taskOutputUserId}"> <ul> <li> <b> <fmt:message key="PointBeforeUpdate" bundle="${tutorial}" /> <c:out value="${oldBonusPoints}"/> </b> </li> <li> <b> <fmt:message key="PointAfterUpdate" bundle="${tutorial}" /> <c:out value="${bdbInstance.bonusPoint}" /> </b> </li> </ul></c:if> <br /><b><fmt:message key="EnterPoint" bundle="${tutorial}" /></b><p /> <form name="Bonus" action="MyNewControllerCmd"><table> <tr> <td> <b>Logon ID </b> </td> <td> <input type="text" name="input1" value="<c:out value="${userName}"/>" /> </td> </tr> <tr> <td> <b>Bonus Point</b> </td> <td> <input type="text" name="input2" /> </td> </tr> <tr> <td colspan="2"> <input type="submit" /> </td> </tr></table></form> <!-- END OF SECTION 9 -->
8. 测试:
a. 启动server
b. 登陆前台用户
c. 访问: http://localhost/webapp/wcs/stores/servlet/MyNewControllerCmd?input1=logon_id&input2=2000 (注:由于缓存可在url后加如: ?StoreId=10051 )
参考: http://pic.dhe.ibm.com/infocenter/wchelp/v7r0m0/topic/com.ibm.commerce.developer.tutorial.doc/tutorial/ttd18a.htm
- WCS学习笔记(第九天) - MyNewControllerCmd整合Bonus entity bean
- WCS学习笔记(第八天) - 创建entity bean实现
- WCS学习笔记(第四天) - 使用data bean从MyNewControllerCmd 向 MyNewView传递信息
- 第九天学习笔记
- java学习笔记--第九天
- WCS学习笔记(第一天) - 增加一个JSP页面访问
- WCS学习笔记(第三天) - JSP提取Controller信息
- WCS学习笔记(第七天) - 修改MyNewTaskCmd任务命令
- J2EE学习笔记五:entity bean概念
- Entity Bean(经典学习笔记之一)
- 黑马程序员--- 学习笔记(第九天)
- iOS-学习笔记-UI-第九天
- 黑马程序员--java学习笔记第九天
- 第九天:听课笔记
- 安全卫士第九天笔记
- 程序学习第九天
- 学习的第九天
- Java学习第九天
- VC 笔记补遗
- C++中给二维指针分配内存
- 在线程中弹出自定义对话框
- 黑马程序员_图形用户界面GUI
- Mysql中count(*),DISTINCT的使用方法和效率研究
- WCS学习笔记(第九天) - MyNewControllerCmd整合Bonus entity bean
- 【转】PHP代码审计
- 网页设计学习:影响收录的五要素
- ExtJs xtype 与空间的一一对应
- CakePHP控制器向视图传值总结
- hadoop2.0 安全配置 kerberos
- mysql中的 IN和FIND_IN_SET的查询问题
- js 实现YYYY-MM-DD日期加上天数得到新的日期
- POJ - 1185 炮兵阵地 状态压缩DP