使用这样的代码:
<c:forEach items="${customers}" var="customer">
${customer.name}
</c:forEach>
IntelliJ Idea能够推断出ForEach循环中“customer”变量的类型属于“Customer”类(假设Customers类似于List&lt; Customer&gt;)。如果我重构java customer类并将getName更改为getFullName,它会将jstl更改为$ {customer.fullName}。
我下载了standard.jar的源代码,但我看不出如何才能真正做到这一点。我知道你应该能够用tei-class发出类型信息,但雅加达Taglibs中的TEI类不能这样做。谁知道我错过了什么?
(我正在尝试制作自己的foreach,但除非我能获得相同级别的支持,否则不会这样做,但我只是不知道该怎么做..)
答案 0 :(得分:2)
我相信intellij特别推断事物,因为它知道JSF / Facelets / JSP中的公共库。我认为taglibs没有任何东西可以向IDE表明这一点。
我不确定他们是否为您提供任何支持以使该功能支持您自己的标记扩展,但我对此表示怀疑。
答案 1 :(得分:2)
我认为Idea具有专门为支持JSTL而编写的代码,而不是基于标记和TLD动态地为任何标记库执行此操作。
在您的示例中,“客户”是如何初始化的?如果Idea可以看到某个方法调用List<Customer> getCustomers()
之类的方法,则可以反映Method
,并发现List
的类型参数为Customer
。否则,我不知道怎么能解决这个问题。
也许Idea中有一些钩子可以为你自己的标签库提供这样的支持。