目录
分页查询数据操作步骤 1
分页查询数据代码 3
扩展一个字段操作步骤 12
详情页操作步骤 14
条件搜索操作步骤 16
表单信息的录入与提交保存操作步骤 19
搭建B2C商城步骤 25
单击此处输入文字。
分页查询数据操作步骤
1. 在trainingStorefront工程中新建controller,例如(UserMessageController)仿照订单历史记录的controller代码编写,在类上加注解@Controller和@RequestMapping并继承extends AbstractSearchPageController
2. 需要在trainingfacade工程中编写自己的facade,(DefaultUserMessageFacade),并将其注入到controller中并加上注解@Resource(name=”defaultUserMessageFacade”)
3. 将新建的DefaultUserMessageFacade注入到trainingfacades工程中的trainingfacades-spring.xml文件中
4. 在trainingcore工程中新建service层,(UserMessageService和UserMessageServiceImpl),并将UserMessageServiceImpl注入到trainingfacades-spring.xml中对应的facade引用处
<bean id="defaultUserMessageFacade" class="org.training.facades.userMessage.impl.DefaultUserMessageFacade" parent="defaultCheckoutFacade"> <property name="modelService" ref="modelService" /> <property name="userMessageService" ref="userMessageService" /> <property name="userMessagePageListtConverter" ref="userMessagePageListtConverter" /> </bean> |
5. 在trainingcore工程中新建dao层(UserMessageDao和UserMessageDaoImpl),并将UserMessageDao注入到UserMessageServiceImpl并生成getter和setter方法,然后将UserMessageDaoImpl注入到trainingfacades-spring.xml中对应的facade引用处,并在trainingcore-spring.xml中加入service和dao的引用声明
<alias alias="userMessageService" name="userMessageService"/> <bean id="userMessageService" class="org.training.core.userservice.impl.UserMessageServiceImpl"> <property name="userMessageDao" ref="userMessageDao"/> </bean> <bean name="userMessageDao" class="org.training.core.userDao.impl.UserMessageDaoImpl"> <property name="pagedFlexibleSearchService" ref="pagedFlexibleSearchService"/> <property name="flexibleSearchService" ref="flexibleSearchService"/> <property name="modelService" ref="modelService"/> </bean> |
6. 在controller 中调用facade中新建的方法,例如我的是getPagedUserMessageListForStatuses(PageableData pageableData)这个方法,
7. 在facade中加入Converter,例如userMessagePageListtConverter,并将其注入到trainingfacades-spring.xml中,新建getPagedUserMessageListForStatuses()方法,在该方法中调用service中的方法getUserMessagePageList(pageableData);引入的转换器可命名为如下:
Converter<UserMessageCodeModel, UserMessageData> userMessagePageListtConverter
8. 在UserMessageServiceImpl中调用UserMessageDaoImpl的findUserMessagePageListAndStore(pageableData)方法
9. 在UserMessageDaoImpl中编写SQL语句,注入
PagedFlexibleSearchService pagedFlexibleSearchService,并将其注入到trainingcore-spring.xml中
10. 在UserMessageDaoImpl中新建
findUserMessagePageListAndStore( final PageableData pageableData)方法,该方法又调用了getPagedFlexibleSearchService().search()方法,将查询结果查出保存到searchpagedata中并返回到相应的页面.
11. trainingfacade工程中新建populator,例如(UserMessagePopulator),实现 Populator<SOURCE, TARGET>,并将source改为UserMessageCodeModel,将target改为 UserMessageData,并将UserMessagePopulator注入到trainingfacades-spring.xml中
<alias name="defaultUserMessagePopulator" alias="userMessagePopulator"/> <bean id="defaultUserMessagePopulator" class="org.training.facades.populators.userPopulator.UserMessagePopulator" > </bean> |
12. 运行ant all和hybrisserver.bat启动服务,如果构建成功并且服务能正常启动起来,说明注入populator是没问题的.
13. 因为一个converter可包含多个populator,所以,此时需要在trainingfacades-spring.xml中将defaultUserMessagePopulator加入到 userMessagePageListtConverter中
<bean id="userMessagePageListtConverter" parent="abstractPopulatingConverter"> <property name="targetClass" value="de.hybris.platform.commercefacades.order.data.UserMessageData"/> <property name="populators"> <list> <ref bean="userMessagePopulator"/> </list> </property> </bean> |
14. 然后再次运行ant all和hybrisserver.bat启动服务,如果都正常,说明converter引用populator成功
15. trainingStorefront工程中新建JSP页面,在页面上引入相关tag与template与分页组件,并用foreach遍历数据
<%@ taglib prefix="pagination" tagdir="/WEB-INF/tags/responsive/nav/pagination" %> <%@ taglib prefix="nav" tagdir="/WEB-INF/tags/responsive/nav" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> |
分页组件 <div class="account-orderhistory-pagination"> <nav:pagination top="true" msgKey="text.account.orderHistory.page" showCurrentPageInfo="true" hideRefineButton="true" supportShowPaged="${
isShowPageAllowed}" supportShowAll="${
isShowAllAllowed}" searchPageData="${
searchPageData}" searchUrl="${
searchUrl}" numberPagesShown="${
numberPagesShown}"/> </div> |
分页查询数据代码
1. UserMessageController
package org.training.storefront.controllers.pages.checkout.steps;
import de.hybris.platform.acceleratorstorefrontcommons.annotations.PreValidateQuoteCheckoutStep; import de.hybris.platform.acceleratorstorefrontcommons.annotations.RequireHardLogIn; import de.hybris.platform.acceleratorstorefrontcommons.breadcrumb.ResourceBreadcrumbBuilder; import de.hybris.platform.acceleratorstorefrontcommons.controllers.ThirdPartyConstants; import de.hybris.platform.acceleratorstorefrontcommons.controllers.pages.checkout.steps.AbstractCheckoutStepController; import de.hybris.platform.acceleratorstorefrontcommons.controllers.util.GlobalMessages; import de.hybris.platform.acceleratorstorefrontcommons.forms.PlaceOrderForm; import de.hybris.platform.cms2.exceptions.CMSItemNotFoundException; import de.hybris.platform.commercefacades.order.data.OrderHistoryData; import de.hybris.platform.commercefacades.order.data.UserMessageData; import de.hybris.platform.commerceservices.order.CommerceCartModificationException; import de.hybris.platform.commerceservices.search.pagedata.PageableData; import de.hybris.platform.commerceservices.search.pagedata.SearchPageData; import de.hybris.platform.order.InvalidCartException; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import de.hybris.platform.acceleratorstorefrontcommons.controllers.pages.checkout.steps.AbstractCheckoutStepController; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import org.training.facades.userMessage.UserMessageFacade; import org.training.storefront.controllers.ControllerConstants; import org.training.storefront.controllers.model.UserMessageForm; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.text.SimpleDateFormat; import java.util.Date; import java.util.regex.Pattern; @Controller @RequestMapping(value = "/checkout/multi/userMessage") public class UserMessageController extends AbstractCheckoutStepController {
private final String QUOTE_DETAILS_CMS_PAGE = "userMessagePageID"; private final String TEXT_ACCOUNT_PROFILE = "text.account.profile"; private static final String BREADCRUMBS_ATTR = "breadcrumbs"; @Resource(name = "accountBreadcrumbBuilder") private ResourceBreadcrumbBuilder accountBreadcrumbBuilder; @Resource(name="defaultUserMessageFacade") private UserMessageFacade userMessageFacade; @Override public String enterStep(Model model, RedirectAttributes redirectAttributes) throws CMSItemNotFoundException, CommerceCartModificationException {
return null; } @Override public String back(RedirectAttributes redirectAttributes) {
return null; } @Override public String next(RedirectAttributes redirectAttributes) {
return null; } @RequestMapping(value="/toUserMessagePage") public String toUserMessagePage(final Model model) throws Exception {
System.out.print("555555555555555555555555"); UserMessageForm userMessageForm = new UserMessageForm(); model.addAttribute("userMessageForm",userMessageForm); storeCmsPageInModel(model, getContentPageForLabelOrId(QUOTE_DETAILS_CMS_PAGE)); setUpMetaDataForContentPage(model, getContentPageForLabelOrId(QUOTE_DETAILS_CMS_PAGE)); model.addAttribute(BREADCRUMBS_ATTR, accountBreadcrumbBuilder.getBreadcrumbs(TEXT_ACCOUNT_PROFILE)); model.addAttribute(ThirdPartyConstants.SeoRobots.META_ROBOTS, ThirdPartyConstants.SeoRobots.NOINDEX_NOFOLLOW); return ControllerConstants.Views.Pages.MultiStepCheckout.UserMessagePage; } @RequestMapping(value = "/saveUserData") public String saveUserData(final Model model,final UserMessageForm userMessageForm) throws Exception {
System.out.println("name"+"11111111111111111111111111111111111111111111111111111111111111111111"); boolean b = validateOrderForm(userMessageForm,model); if(b==false){
model.addAttribute("userMessageForm",userMessageForm); storeCmsPageInModel(model, getContentPageForLabelOrId(QUOTE_DETAILS_CMS_PAGE)); setUpMetaDataForContentPage(model, getContentPageForLabelOrId(QUOTE_DETAILS_CMS_PAGE)); model.addAttribute(BREADCRUMBS_ATTR, accountBreadcrumbBuilder.getBreadcrumbs(TEXT_ACCOUNT_PROFILE)); model.addAttribute(ThirdPartyConstants.SeoRobots.META_ROBOTS, ThirdPartyConstants.SeoRobots.NOINDEX_NOFOLLOW); return ControllerConstants.Views.Pages.MultiStepCheckout.UserMessagePage; } UserMessageData userMessageData = new UserMessageData(); String longtime = String.valueOf(new Date().getTime()); userMessageData.setUserMessageID(String.valueOf(new Date().getTime())); userMessageData.setBirthday(userMessageForm.getBirthday()); userMessageData.setHobby(userMessageForm.getHobby()); userMessageData.setMoney(userMessageForm.getMoney()); userMessageData.setRemark(userMessageForm.getRemark()); userMessageData.setSex(userMessageForm.getSex()); userMessageData.setTelphone(userMessageForm.getTelphone()); userMessageData.setUserName(userMessageForm.getUserName());
model.addAttribute(new UserMessageForm()); System.out.println("name:"+userMessageData.getUserName()+"11111111111111111111111111111111111111111111111111111111111111111111"); userMessageFacade.doUserMessage(userMessageData); storeCmsPageInModel(model, getContentPageForLabelOrId(QUOTE_DETAILS_CMS_PAGE)); setUpMetaDataForContentPage(model, getContentPageForLabelOrId(QUOTE_DETAILS_CMS_PAGE)); model.addAttribute(BREADCRUMBS_ATTR, accountBreadcrumbBuilder.getBreadcrumbs(TEXT_ACCOUNT_PROFILE)); model.addAttribute(ThirdPartyConstants.SeoRobots.META_ROBOTS, ThirdPartyConstants.SeoRobots.NOINDEX_NOFOLLOW); // return ControllerConstants.Views.Pages.MultiStepCheckout.UserMessageSuccessPage; //对应的接口里添加相应的变量 String MikeDetailPage = "pages/account/MKDetailPage"; return "redirect:" + "/userMessagePageList/listusers"; //对应的接口里添加相应的变量 String MikeDetailPage = "pages/account/MKDetailPage"; } protected boolean validateOrderForm(final UserMessageForm userMessageForm, final Model model) {
// final String securityCode = userMessageForm.getSecurityCode(); boolean invalid = false; //校验用户名 if(null==userMessageForm.getUserName() || "".equals(userMessageForm.getUserName())){
GlobalMessages.addErrorMessage(model, "checkForm.error.userName"); return invalid; } /** * 正则表达式:验证手机号 */ final String REGEX_MOBILE = "^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$"; if(!Pattern.matches(REGEX_MOBILE, userMessageForm.getTelphone())){
GlobalMessages.addErrorMessage(model, "checkForm.error.mobile"); return invalid; } //校验生日 final String REGEX_BRITHDAY = "YYYY/MM/DD"; final String birthday = userMessageForm.getBirthday(); if (null==birthday || "".equals(birthday) || birthday.length()!=10 || birthday.split("/").length!=3){
GlobalMessages.addErrorMessage(model, "checkForm.error.birthday"); return invalid; } String year = birthday.substring(0,4); String month = birthday.substring(5,7); String day = birthday.substring(8,10); if(Integer.parseInt(year)<1900 || Integer.parseInt(year)>2018){
GlobalMessages.addErrorMessage(model, "checkForm.error.year"); return invalid; } if(Integer.parseInt(month)<=0 || Integer.parseInt(month)>12){
GlobalMessages.addErrorMessage(model, "checkForm.error.month"); return invalid; } if(Integer.parseInt(day)<=0 || Integer.parseInt(day)>31){
GlobalMessages.addErrorMessage(model, "checkForm.error.day"); return invalid; } if(null==userMessageForm.getMoney() || "".equals(userMessageForm.getMoney())){
GlobalMessages.addErrorMessage(model, "checkForm.error.money"); return invalid; } if(null==userMessageForm.getHobby() || "".equals(userMessageForm.getHobby())){
GlobalMessages.addErrorMessage(model, "checkForm.error.hobby"); return invalid; } // if (getCheckoutFlowFacade().hasNoDeliveryAddress()) {
// GlobalMessages.addErrorMessage(model, "checkout.deliveryAddress.notSelected"); // invalid = true; // } invali |