Доступ к атрибутам valueExpression в ManagedBean
У меня есть пользовательский тег facelet, который просто включает в себя outputText. Причиной использования пользовательского тега является изменение значения в зависимости от поля объекта. Например: если outputText используется для процентного значения, я хочу напечатать значение с% без необходимости добавления его клиентом
Моя проблема в том, как мне получить доступ к выражению значения атрибутов в компоненте поддержки
<f:attribute name="value" value="#{value}" />
<h:outputText value="#{outputBean.value}"></h:outputText>
В бобе
public String getValue() {
//ValueExpression valueExpression = Read the page attributes and get the value expression of attribute "value"
// String value = set the value according to the value expression after necessary modifications
return value;
}
1 ответ
Решение
Вы хотите получить ValueExpression #{value} из компонента f: attribute? Было бы проще не искать в представлении, а просто добавить атрибут и проверить компонент h:outputText и присвоить атрибуту специальное уникальное имя:
Фрагмент XHTML:
<h:outputText value="#{myBean.value}" >
<f:attribute name="tofuwurst" value="#{chunk}"/>
</h:outputText>
MyBean.java:
import javax.el.ValueExpression;
import javax.enterprise.context.RequestScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.inject.Named;
@Named
@RequestScoped
public class MyBean {
private Object value;
public Object getValue() {
FacesContext context = FacesContext.getCurrentInstance();
UIComponent currentComponent = UIComponent.getCurrentComponent(context);
ValueExpression veTofuwurst = currentComponent.getValueExpression("tofuwurst");
assert null != veTofuwurst;
// have fun with a #{chunk} of Tofuwurst here
return value;
}
public void setValue(Object value) {
this.value = value;
}
}