我试图使用ProductLookup液滴在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传递给href标记dsp:a时,我面临着问题。生成的HTML将${id}硬编码为display_product.jsp?itemId=${id}。我得到了产品清单,但URL是我面临的问题。如何将element.id中的值传递给dsp:a的href属性
我也试过以下几种方法,但都没有成功。
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>发布于 2014-08-27 02:24:37
要将参数传递给另一个页面,只需按照下面的代码片段使用<dsp:param>标记(嵌套在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 }">更新:
当我仍然感到惊讶的是,几乎没有人知道如何做最基本的事情,比如传递参数,我已经包括了其他DSP标记,这些标记可以与<dsp:param>一起使用。
可以为使用<dsp:include>的包含的JSP片段传递参数。
<dsp:tomap var="product" param="element" recursive="false"/>
<dsp:include page="fragments/myfragment.jsp">
<dsp:param name="itemId" value="${ product.id } />
</dsp:include>这种方法也适用于这些标记:
<dsp:iframe><dsp:img><dsp:link>发布于 2016-07-21 17:51:21
@Bated答案非常彻底,但希望添加一些其他信息,说明为什么使用ATG dsp标记来实现这一目标是如此重要。
ATG以两种方式维护您的会话:
通过使用<dsp>标记,您可以确保维护用户会话,因为用户很可能禁用了cookies,并且dsp标记将恢复为使用查询字符串。
由于这个原因,使用html锚标记是不安全的,因为只有在启用cookie的情况下才会维护用户会话。
发布于 2014-08-26 16:43:47
请尝试以下片段。您需要使用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>https://stackoverflow.com/questions/25510040
复制相似问题