hybris程序搭建-总结文档.docx

本文档详细介绍了在Hybris平台中进行程序搭建的各个步骤,包括分页查询数据、扩展字段、详情页创建、条件搜索以及表单信息录入与保存的操作流程,并提供了B2C商城的搭建步骤。主要涉及了controller、facade、service、dao层的构建以及JSP页面和数据库交互的相关代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

分页查询数据操作步骤 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,(UserMessageServiceUserMessageServiceImpl),并将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(UserMessageDaoUserMessageDaoImpl),并将UserMessageDao注入到UserMessageServiceImpl并生成gettersetter方法,然后将UserMessageDaoImpl注入到trainingfacades-spring.xml中对应的facade引用处,并在trainingcore-spring.xml中加入servicedao的引用声明

<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中调用UserMessageDaoImplfindUserMessagePageListAndStore(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 allhybrisserver.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 allhybrisserver.bat启动服务,如果都正常,说明converter引用populator成功

15. trainingStorefront工程中新建JSP页面,在页面上引入相关tagtemplate与分页组件,并用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值