首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在中使用<dsp:a>生成动态URL

如何在中使用<dsp:a>生成动态URL
EN

Stack Overflow用户
提问于 2014-08-26 15:49:16
回答 3查看 3.2K关注 0票数 4

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

代码语言:javascript
运行
复制
<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:ahref属性

我也试过以下几种方法,但都没有成功。

1.

代码语言:javascript
运行
复制
<dsp:a href="display_product.jsp?itemId=<%=out.print(element.id) %>">

2.

代码语言:javascript
运行
复制
<dsp:a href="display_product.jsp?itemId=<%=out.print(id) %>">

3.

代码语言:javascript
运行
复制
<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>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-27 02:24:37

要将参数传递给另一个页面,只需按照下面的代码片段使用<dsp:param>标记(嵌套在ProductLookup液滴中):

这是传统的ATG方法:

代码语言:javascript
运行
复制
 <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更简洁、更容易阅读,并允许在引用值时具有更大的灵活性:

代码语言:javascript
运行
复制
<%-- 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",因为您只引用产品的直接属性。如果您想要引用属性的属性,那么您可以这样做(下面的代码没有经过测试,但是应该给您一个大致的想法):

代码语言:javascript
运行
复制
<dsp:tomap var="product" param="element" recursive="true"/>
<dsp:img page="${ product.image.url }">

更新:

当我仍然感到惊讶的是,几乎没有人知道如何做最基本的事情,比如传递参数,我已经包括了其他DSP标记,这些标记可以与<dsp:param>一起使用。

可以为使用<dsp:include>的包含的JSP片段传递参数。

代码语言:javascript
运行
复制
<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>
票数 8
EN

Stack Overflow用户

发布于 2016-07-21 17:51:21

@Bated答案非常彻底,但希望添加一些其他信息,说明为什么使用ATG dsp标记来实现这一目标是如此重要。

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

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

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

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

票数 1
EN

Stack Overflow用户

发布于 2014-08-26 16:43:47

请尝试以下片段。您需要使用dsp:getvalueof,如下所示。

代码语言:javascript
运行
复制
<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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25510040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档