【发布时间】:2018-06-02 14:59:47
【问题描述】:
这用于产品比较功能。产品具有产品代码、名称、图像 URL、评论、价格等属性。我的产品比较面板将只有我计划在会话中存储的每个产品的几个功能。这可以使用 JQuery 完成吗?策略应该是什么?
更新:
组件控制器
@Override
protected void fillModel(final HttpServletRequest request, final Model model,
final ProductCompareComponentModel component)
final Cookie[] cookies = request.getCookies();
String productList = null;
boolean cookieFound = false;
logger.info("Displaying session value for product compare" + sessionService.getAttribute("sessionProductCode"));
if (cookies != null)
{
logger.info("Cookies not null");
for (final Cookie cookie : cookies)
{
logger.info("Cookie name" + cookie.getName());
if (cookie.getName().equals("productList") && cookie.getValue() != null)
{
cookieFound = true;
productList = cookie.getValue().toString();
logger.info("Product List value" + cookie.getValue().toString());
}
}
}
if (cookieFound == false)
{
if (sessionService.getAttribute("sessionProductCode") != null)
{
productList = sessionService.getAttribute("sessionProductCode");
}
}
final ArrayList<ProductCompareDTO> prodCompareMapPanelView = populateCompareMap(productList);
if (component.getDisplayType().toString() == CommonConstants.COMPARE_VIEW_PANEL)
{
logger.info("Displaying panel view ");
model.addAttribute("prodCompareMapPanelView", prodCompareMapPanelView);
}
else
if (component.getDisplayType().toString() == CommonConstants.COMPARE_VIEW_FULL)
{
logger.info("Displaying full view ");
}
model.addAttribute("displaytype", component.getDisplayType().toString());
model.addAttribute("maxCount", component.getMaxProductCount());
}
组件 JSP
<c:choose>
<c:when test="${not empty maxCount && not empty displaytype}">
<div id="compare-pane" class="row comparePanel1">
<button type='button' onclick='doComparePanelClose()'>Close
Compare Panel</button>
<c:if test="${displaytype == 'PANELVIEW'}">
<c:forEach items="${prodCompareMapPanelView}" var="mapEntry">
<div class="col-sm-4" id="innerdiv${mapEntry.code}">
<c:if test="${(not empty mapEntry.name)}">
${mapEntry.name}
</c:if>
<c:if test="${not empty mapEntry.thumbnail }">
<img src="${mapEntry.thumbnail}" />
<button id="close${mapEntry.code}" class="compareButton"
type="submit" data-product-id="${mapEntry.code}"
onclick="closeCompareProductPanel('${mapEntry.code}');">Close
X</button>
</c:if>
</div>
</c:forEach>
</c:if>
<div id="bottomInnerComparePanel1">*Compare upto ${maxCount }
products</div>
<button id="comparesubmit" class="compareButton" type="submit"
onclick="compareSubmit();">See Comparison ></button>
</div>
<c:url value="/search/compare" var="compareUrl" />
<form id="compareForm" method="get" action="${compareUrl}"
target="_blank">
<c:if test="${displaytype == 'FULLVIEW'}">
</c:if>
</form>
</c:when>
</c:choose>
搜索页面控制器
@SuppressWarnings("boxing")
@RequestMapping(value = "/compare", method = RequestMethod.GET)
public String compareProducts(@RequestParam(value = "prevPage", defaultValue = StringUtils.EMPTY) final String prevPage,
final Model model, final HttpSession session, final HttpServletRequest request)
throws CMSItemNotFoundException, UnsupportedEncodingException
{
// fetching product list from sesssion and returning Product Data map
final Map<String, List<ProductClassificationData>> productClassDataMap = new HashMap<String, List<ProductClassificationData>>();
final Map<String, HashSet<String>> prodClassMap = new TreeMap<String, HashSet<String>>();
final String lastCode = null;
final Cookie[] cookies = request.getCookies();
String productList = null;
boolean cookieFound = false;
if (cookies != null)
{
logger.info("Cookies not null");
for (final Cookie cookie : cookies)
{
logger.info("Cookie name" + cookie.getName());
if (cookie.getName().equals("productList") && cookie.getValue() != null)
{
cookieFound = true;
productList = cookie.getValue().toString();
logger.info("Product List value" + cookie.getValue().toString());
}
}
}
if (StringUtils.isNotBlank(productList))
{
final String[] values = productList.split("\\|");
final String PRODUCT_COMPARE_PAGE = "productComparePage";
storeCmsPageInModel(model, getContentPageForLabelOrId(PRODUCT_COMPARE_PAGE));
setUpMetaDataForContentPage(model, getContentPageForLabelOrId(PRODUCT_COMPARE_PAGE));
final List<ProductData> productDatalList = new ArrayList<ProductData>();
final List<String> productCodesList = new ArrayList<String>();
for (final String productcode : values)
{
ProductData productData = null;
final List<ProductOption> options = new ArrayList<>(
Arrays.asList(ProductOption.BASIC, ProductOption.CLASSIFICATION, ProductOption.PRICE, ProductOption.STOCK));
if (productcode != null && "".equalsIgnoreCase(productcode))
{
productData = productFacade.getProductForCodeAndOptions(productcode, options);
productDatalList.add(productData);
productCodesList.add(productcode);
}
}
// fetch feature data and add it to model
}
final int mapSize = finalDataList.size();
model.addAttribute("finalDataList", finalDataList);
model.addAttribute("mapSize", mapSize);
model.addAttribute("compareCodeList", productCodesList);
model.addAttribute("compareCodeListSize", productCodesList.size());
model.addAttribute("prodDataList", productDatalList);
}
return getViewForPage(model);
}
当用户单击“查看比较按钮”时,我将重定向到一个新页面 productComparePage.jsp,我想在其中显示产品及其所有属性的完整比较。但是现在我再次从搜索页面控制器重定向到组件控制器。我在这个新页面上再次获得了面板视图。
【问题讨论】:
-
我确信它可以,但是没有提供足够的详细信息来说明您打算从哪里比较或从哪里比较?请花几分钟阅读How to Ask和minimal reproducible example来帮助我们
-
我在我的 jsp 文件中获得了一个 javascript 对象列表 - 'Products'。我必须根据用户的选择来比较它们。这是任何 B2C 网站上的电子商务产品比较功能
-
这还是太模糊了。我无法想象您在最后 2 分钟内彻底阅读了这 2 个链接
-
我目前没有代码 sn-p。但我可以给出一个大纲 我的 JSP 文件 - ProductList.jsp 我可以使用 {product},{product.productCode},{product.name} 访问此处的所有产品 现在我必须编写一个 jquery 来传递每个产品详细信息以进行产品比较.所以我为 productList Page 上的每个产品定义了一个复选框,它将产品对象传递给我的 jquery 下一步是将此详细信息添加到 session 。假设用户选择 Product 001 。我希望产品代码、名称、价格进入用户会话,以便我可以将其添加到产品比较 div。我希望它现在清楚了吗?
-
请edit the question 提供详细信息,不要在 cmets 中进行重大更新。了解如何使用 ajax 向服务器发送数据。
标签: jquery e-commerce javascript-objects hybris