我覺得回答BalusC給出的是最好的答案。它顯示了JSF 2.0比1.x有如此巨大的改進的許多小原因之一。
如果您使用的是1.x版本,您可以嘗試一個EL函數,該函數將組件的ID放入請求範圍中,您的支持bean方法可以採用某種名稱。
E.g.
<h:inputText id="foo" size="#{my:getWithID(configBean.size, 'foo')}" />
的EL方法的實現可能是這個樣子:
public static Object getWithID(String valueTarget, id) {
FacesContext context = FacesContext.getCurrentInstance();
ELContext elContext = context.getELContext();
context.getExternalContext().getRequestMap().put("callerID", id);
ValueExpression valueExpression = context.getApplication()
.getExpressionFactory()
.createValueExpression(elContext, "#{"+valueTarget+"}", Object.class);
return valueExpression.getValue(elContext);
}
在這種情況下,只要在配置bean的的getSize()方法被調用,調用組件的ID將可通過請求範圍中的「callerID」。爲了使它變得更整潔一些,你應該添加一個finally塊來在調用完成後從作用域中刪除變量。 (請注意,我沒有嘗試上面的代碼,但它有希望證明這個想法)
同樣,當你使用JSF 1.x時,這將是最後的手段。最乾淨的解決方案是使用JSF 2.0和BalusC描述的方法。
哇!非常感謝 ! – bertie 2010-12-20 04:30:40