给出以下示例:
<h:inputText id="foo" size="#{configBean.size}" />
我想在getter方法中获取id调用组件的foo,以便可以通过键从属性文件返回大小foo.length。
id
foo
foo.length
public int getSize() { String componentId = "foo"; // Hardcoded, but I should be able to get the id somehow int size = variableConfig.getSizeFor(componentId); return size; }
我该如何实现?
从JSF 2.0开始,组件范围中有了一个新的隐式EL变量:#{component}它引用当前UIComponent实例。在其getter方法中getId(),您需要一种。
#{component}
UIComponent
getId()
因此,您可以执行以下操作:
<h:inputText id="foo" size="#{configBean.getSize(component.id)}" />
与
public int getSize(String componentId) { return variableConfig.getSizeFor(componentId); }
另外,您也可以制作variableConfig一个,@ApplicationScoped @ManagedBean以便执行以下操作:
variableConfig
@ApplicationScoped
@ManagedBean
<h:inputText id="foo" size="#{variableConfig.getSizeFor(component.id)}" />
(每当您想将参数传递给方法时,都必须在EL中使用完整的方法名称而不是属性名称,因此variableConfig.sizeFor(component.id)将无法使用,或者您必须在类中将实际getSizeFor()方法重命名为sizeFor())
variableConfig.sizeFor(component.id)
getSizeFor()
sizeFor()