【问题标题】:JSTL foreach and intellisenseJSTL foreach 和智能感知
【发布时间】:2010-11-24 17:58:47
【问题描述】:

使用这样的代码:

<c:forEach items="${customers}" var="customer">
    ${customer.name}
</c:forEach>

IntelliJ Idea 能够推断出 ForEach 循环中“客户”变量的类型属于“客户”类(假设客户类似于 List)。如果我重构 java 客户类并将 getName 更改为 getFullName,它会将 jstl 更改为读取 ${customer.fullName}。

我下载了standard.jar 的源代码,但我看不出这是如何真正做到的。我知道您应该能够使用 tei 类发出类型信息,但 Jakarta Taglibs 中的 TEI 类不这样做。有人知道我错过了什么吗?

(我正在尝试制作自己的 foreach,但除非我能获得相同级别的支持,否则我不会这样做,但我只是不知道该怎么做..)

【问题讨论】:

  • 也许它使用了非常低的技术。也许它甚至可以从变量名中猜测。我真的会尝试更改变量名,看看它是否会丢失......
  • 这绝对比这聪明得多,但我很困惑使用什么黑暗艺术组合来实现这一点。
  • 嘿,伙计,将 Customer 类的名称重构为 Cust,并告诉我它对 jstl 的作用。

标签: java intellij-idea jstl type-inference


【解决方案1】:

我相信 intellij 是专门推断事物的,因为它知道 JSF/Facelets/JSP 中的公共库。我不认为 taglibs 暴露了任何东西来向 IDE 表明这一点。

我不确定他们是否为您提供任何钩子以使该功能支持您自己的标签扩展,但我对此表示怀疑。

【讨论】:

    【解决方案2】:

    我认为 Idea 有专门为支持 JSTL 而编写的代码,而不是能够基于标签和 TLD 为任何标签库动态地执行此操作。

    在您的示例中,“客户”是如何初始化的?如果 Idea 可以看到在某处调用了像 List&lt;Customer&gt; getCustomers() 这样的方法,它可以反映 Method 并发现 List 的类型参数是 Customer。不然不知道怎么弄出来的。

    也许Idea中有钩子可以为你自己的标签库提供这样的支持。

    【讨论】:

      猜你喜欢
      • 2010-10-28
      • 2012-09-27
      • 1970-01-01
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多