【问题标题】:Sightly jstl c:set analog视觉上 jstl c:set 模拟
【发布时间】:2015-11-21 17:00:55
【问题描述】:

在jsp上我可以写如下代码:

<c:set var="salary"  value="${object.salary}"/>

然后在代码中我可以使用${salary} 变量

你能帮忙用sightly重写吗?

附言

我试过了:

<div data-sly-use.salary="MySalary">
    <div data-sly-use.product="MyBean"  data-sly-unwrap>
        {
        <ul data-sly-list="${product.specifications}" data-sly-unwrap>
                "${item.sku ? item.sku : 'product'}" : "${item.label} ${item.value}"<div data-sly-test="${!itemList.last}" data-sly-unwrap>,</div>
        </ul>
        }
    </div>
</div>
<div data-bla-bla="${salary}"></div>

但我看到编译错误

【问题讨论】:

  • 您似乎正在尝试使用 Sightly 生成 JSON。 Sightly 不是为此而设计的,并且编程语言不应该在同一个文件中混合使用。我建议你看看:stackoverflow.com/questions/31144652/…
  • @Gabriel Walt 我看到了河内塔是在哪里开发的问题

标签: java aem sightly


【解决方案1】:

您没有在 Sightly 中分配变量的功能。可能的最大值是比较值,否则您的所有逻辑都进入 Java 或 JavaScript Use-API 类。

当您使用data-sly-use 时,提供的值必须是

  1. 扩展WCMUse 类或实现Use 接口的Java 类或
  2. 定义使用类的 JavaScript 文件。

因此,当data-sly-use 的值不是上述两者时,您会收到编译错误。

不过,我可以为您的问题提出一个解决方法,但我不建议您使用相同的方法。 您可以使用data-sly-test 并为其分配一个变量名,以后可以在其他地方使用。

例如。

<div data-sly-test.salary="MySalary"></div>
<div>
    <div data-sly-use.product="MyBean"  data-sly-unwrap>
        {
        <ul data-sly-list="${product.specifications}" data-sly-unwrap>
                "${item.sku ? item.sku : 'product'}" : "${item.label} ${item.value}"<div data-sly-test="${!itemList.last}" data-sly-unwrap>,</div>
        </ul>
        }
    </div>
</div>
<div data-bla-bla="${salary}"></div>

【讨论】:

  • 我需要分配
    ... 的内容,而不仅仅是字符串 "我的工资”
  • 您可以使用语法中提到的名称product 访问bean 的值。如果您需要另一个变量中的 bean 的某些值,那么语法仍然相同 &lt;div data-sly-test.salary="${ product.salary }"&gt;&lt;/div&gt;
  • @rakhi4110,你是对的,你可能也同意这是一种滥用语言来处理它故意不允许的事情。模板需要的变量应该用Use-API准备好,模板不应该需要这样的hack。
  • @GabrielWalt 完全同意你的看法。这就是我提到我不推荐它的原因。但是,这不是我唯一建议的黑客行为。 docs 本身提到使用它来构造 if-else 逻辑,通过将输出存储在变量中:)
猜你喜欢
相关资源
最近更新 更多
热门标签