我只是在Webapp中有一点惊喜,我在.jsp页面中使用EL.
我添加了一个布尔属性并抓住了我的头,因为我已经命名了一个布尔"isDynamic",所以我可以这样写:
<c:if test="${page.isDynamic}">
...
</c:if>
Run Code Online (Sandbox Code Playgroud)
我发现哪个更容易阅读:
<c:if test="${page.dynamic}">
...
</c:if>
Run Code Online (Sandbox Code Playgroud)
但是.jsp无法编译,错误如下:
javax.el.PropertyNotFoundException: Property 'isDynamic' not found on type com...
Run Code Online (Sandbox Code Playgroud)
我发现我的IDE(我花了一些时间注意它),在生成getter时,生成了一个名为的方法:
isDynamic()
Run Code Online (Sandbox Code Playgroud)
代替:
getIsDynamic()
Run Code Online (Sandbox Code Playgroud)
一旦我通过getIsDynamic()手动替换了isDynamic(),一切都运行正常.
所以我在这里有两个问题:
使用"is"启动布尔属性的名称是不是很糟糕?
不管是不是坏了,IntelliJ是否通过自动生成名为isDynamic而不是getIsDynamic的方法犯了错误?
Bal*_*usC 27
敏感话题,但在我看来这很糟糕.变量名称不应表示问题,而应表示语句.例如pageIsDynamic,dynamical或dynamicallyGenerated.然而,对此没有明确的编码约定.只要你在整个编码过程中保持一致,无论哪种方式都不会造成太大的伤害.
不,它没有.该JavaBean规范规定,它被允许使用的前缀布尔getter方法的名称is为好.通常以上是优选的get.与其他所有体面的IDE一样,IntellIJ只是坚持这个规范.Eclipse和Netbeans也会这样做.这是第8.3.2章的摘录:
8.3.2布尔属性
另外,对于布尔属性,我们允许getter方法匹配模式:
Run Code Online (Sandbox Code Playgroud)public boolean is<PropertyName>();
“is<PropertyName>”可以提供该方法来代替“get<PropertyName>”方法,或者除了“get<PropertyName>”方法之外还可以提供该方法.在任何一种情况下,如果该
“is<PropertyName>”方法存在于布尔属性中,那么我们将使用该“is<PropertyName>”方法来读取属性值.布尔属性的示例可能是:Run Code Online (Sandbox Code Playgroud)public boolean isMarsupial(); public void setMarsupial(boolean m);
小智 10
isDynamic()通常是作为布尔getter的方式.
public boolean isDynamic() {
return dynamic;
}
Run Code Online (Sandbox Code Playgroud)
在您的模板中,您可以使用:
<c:if test="${dynamic}">
...
</c:if>
Run Code Online (Sandbox Code Playgroud)