【问题标题】:How to generate a dynamic URL using <dsp:a> in Oracle Commerce(ATG)如何在 Oracle Commerce(ATG) 中使用 <dsp:a> 生成动态 URL
【发布时间】:2014-10-20 00:40:12
【问题描述】:

我正在尝试使用 ProductLookup droplet 在 jsp 中显示产品列表,如下所示。我还尝试提供一个超链接以导航到单个产品的产品详细信息页面。

<dsp:droplet name="/atg/commerce/catalog/ProductLookup">
    <dsp:param param="element.id" name="id"/>
    <dsp:oparam name="output"><br/>
    <dsp:a href="display_product.jsp?itemId=${id}">  
    Product display Name: 
    <b><dsp:valueof param="element.displayName"/></b><br/>
    Product description Name:
    <dsp:valueof param="element.description"/>
    </dsp:a>
    </dsp:oparam>
</dsp:droplet>

但是,我在将产品 ID 传递给 dsp:ahref 标签时遇到了问题。生成的 HTML 将${id} 硬编码为display_product.jsp?itemId=${id}。我正在获取产品列表,但 URL 是我面临问题的地方。如何将element.id 中的值传递给dsp:ahref 属性?

我也尝试了以下方法,但没有成功。

1.

<dsp:a href="display_product.jsp?itemId=<%=out.print(element.id) %>">

2.

<dsp:a href="display_product.jsp?itemId=<%=out.print(id) %>">

3.

<dsp:getvalueof var="id" id="id" >
            <dsp:a href="display_product.jsp?itemId=${id}">
            Product display Name: 
            <b><dsp:valueof param="element.displayName"/></b><br/>
            Product description Name:
            <dsp:valueof param="element.description"/>
            </dsp:a>
            </dsp:getvalueof>

【问题讨论】:

  • 选项 3 是您最接近工作的最佳选择......但应该是 id="id" 而不是 param="id"
  • 观察:尝试养成使用&lt;dsp:a *page*= 而不是href 的习惯。对于相对 url,它将正确解析,而对于绝对 url,它将添加上下文路径。
  • 您好,我已经根据您的建议(param="id")尝试了选项 3,但它仍然无法正常工作:(。感谢您的建议

标签: java jsp atg oracle-commerce atg-droplet


【解决方案1】:

@Bated 的回答非常详尽,但想补充一些额外的信息,说明为什么使用 ATG dsp 标签来实现这一点如此重要。


ATG 以两种方式维护您的会话:

  1. 通过存储在 cookie 中的 jsessionid
  2. 通过存储在查询字符串中的 jsessionid

通过使用&lt;dsp&gt; 标记,您可以确保维护用户会话,因为用户很可能禁用了 cookie,并且dsp 标记将恢复为使用查询字符串。

由于这个原因,使用 html 锚标记是不安全的,因为用户会话只有在启用 cookie 的情况下才会被维护。

【讨论】:

    【解决方案2】:

    要将参数传递到另一个页面,您只需按照下面的代码片段使用&lt;dsp:param&gt; 标记(嵌套在您的 ProductLookup 小滴中):

    这是老式的 ATG 方法:

     <dsp:a href="display_product.jsp">
         Product Name: <b><dsp:valueof param="element.displayName"/></b><br/>
         Product description: <dsp:valueof param="element.description"/>
         <%-- this will pass the itemId parameter and value--%>
         <dsp:param name="itemId" param="element.id"/>
     </dsp:a>
    

    首选的方法是使用 jstl EL 变量,这使您的 jsp 更清晰、更易于阅读,并且在引用值时允许更大的灵活性:

    <%-- name the "element" and convert to a map  --%>
    <dsp:tomap var="product" param="element" recursive="false"/>
    <dsp:a href="display_product.jsp">
         Product Name: <b>${ product.displayName }</b><br/>
         Product description: ${ product.description }
         <dsp:param name="itemId" value="${ product.id }"/>
    </dsp:a>
    

    我在上面的示例中使用了recursive="false",因为您仅引用产品的直接属性。如果你想引用属性的属性,那么你可以这样做(下面的代码未经测试,但应该给你一个大致的想法):

    <dsp:tomap var="product" param="element" recursive="true"/>
    <dsp:img page="${ product.image.url }">
    

    更新:

    我仍然惊讶于很少有人知道如何做最基本的事情,比如传递参数,我已经包含了其他可以与&lt;dsp:param&gt;结合使用的 DSP 标签

    您可以为包含的 JSP 片段传递参数,这些片段使用 &lt;dsp:include&gt;

    <dsp:tomap var="product" param="element" recursive="false"/>
    <dsp:include page="fragments/myfragment.jsp">
        <dsp:param name="itemId" value="${ product.id } />
    </dsp:include>
    

    这种方法也适用于这些标签:

    • &lt;dsp:iframe&gt;
    • &lt;dsp:img&gt;
    • &lt;dsp:link&gt;

    【讨论】:

    • 它工作了谢谢你,但是当我使用 param="elment.id" 而不是 "paramavalue" 属性时它工作了
    • @MrLore 非常好的解释,非常感谢。非常感谢。
    • @HariKiranMutyala 你感谢错人了。坚持下去,您将了解这是如何工作的......
    【解决方案3】:

    请尝试以下sn-p。您需要使用 dsp:getvalueof ,如下所示。

    <dsp:droplet name="/atg/commerce/catalog/ProductLookup">
        <dsp:param param="element.id" name="id"/>
        <dsp:oparam name="output"><br/>
           <dsp:getvalueof id="id" param="element.id" idtype="java.lang.String">
               <dsp:a href="display_product.jsp?itemId=<%=id%>">
                   Product Name: <b><dsp:valueof param="element.displayName"/></b><br/>
                   Product description: <dsp:valueof param="element.description"/>
               </dsp:a>
           </dsp:getvalueof>
        </dsp:oparam>
    </dsp:droplet>
    

    【讨论】:

    • &lt;%=id%&gt; 不应该也是${id} 吗?真的不鼓励在 JSP 中使用 scriptlets
    • @radimpe 谢谢,会试试的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    相关资源
    最近更新 更多