据我所知,用于转换属性/类名的标准 JavaBeans 约定用于 JSF EL,即方法对(get|is)Property + setProperty
被转换为property
:
public class SomeComponent {
public String getAttribute() { ... }
public void setAttribute(String attribute) { ... }
}
<h:outputText value="#{comp.attribute}" />
bean 名称也是如此(除非这些名称直接在@ManagedBean
注释中指定):
@ManagedBean
public class UsefulBean {
...
}
<h:outputText value="#{usefulBean.doSomething()}" />
这种行为大多被记录在案。但是,当 bean 或属性名称以首字母缩写词开头时,我无法找到有关转换约定的任何信息,例如
@ManagedBean
public class URLManagerBean {
}
<h:outputText value="#{...ManagerBean.doSomething()}" />
在前面的代码片段中应该用什么代替省略号?
令人惊讶的是,互联网上几乎没有这方面的信息。几乎所有 JSF 托管 bean 使用示例都使用开头没有多个相邻大写字母的 bean 名称。在我设法找到的少数几个地方,建议不要以任何方式转换以多个大写字母开头的 bean 名称,即它应该URLManagerBean
在前面的代码片段中。
不幸的是,我们有一个项目,其中很多 bean 都是这样命名的。在使用这些 bean 的任何地方,它们都遵循这个奇怪的,至少在某种程度上,约定:
class URLManagerBean -> uRLManagerBean
也就是说,只有首字母缩略词的首字母不大写。该项目似乎运行良好,因此该约定以某种方式起作用。但是 IntelliJ IDEA 不喜欢这样;它认为 JSF bean 真的应该像这样URLManagerBean
命名,除非我通过注释显式重命名它。
class URLManagerBean
我尝试更改from uRLManagerBean
to的用法URLManagerBean
,但显然这不起作用-我尝试过的那些页面停止工作。
现在我认为这种奇怪约定背后的原因是我们通过SpringBeanFacesELResolver
. 但是,此行为未在任何地方记录。
这种行为有什么解释吗?