BeanELResolver @Override getValue(ELContext context,Object base,Object property)

时间:2013-02-14 07:32:27

标签: jsf java-ee el

我有

public class ExtendedBeanELResolver extends BeanELResolver {
private static final Pattern regExpDn = Pattern.compile("PLMN-PLMN/\\w+.\\d+(.*)");
@Override
public Object getValue(ELContext context, Object base, Object property)
   try {

    // remake DIST.NAME appearance
    if (property.equals("dn") && base instanceof Alarm && ((Alarm) base).getCustomer().getNameEng().equalsIgnoreCase("mts")) {

    String dn = null;
    try {
        dn = ((Alarm) base).getDn();
        Matcher mtch = regExpDn.matcher(dn);
        mtch.find();
        ((Alarm) base).setDn(mtch.group(1));
    } catch (Throwable e) {
        // logger.error("error in dn - " + dn);
    } finally {
        return super.getValue(context, base, property);
    }
    }
}

根据某些条件更改对象中的某些可见值。如果从jsf <ui:param name="fullDistName" value="#{alarm.dn}" />调用,我不想更改值 我怎么能得到这个EL所谓的组件的id? 对不起我的英文。

1 个答案:

答案 0 :(得分:0)

您可以通过编程方式评估#{component}或调用UIComponent#getCurrentComponent()来获取当前的JSF组件。

UIComponent component = UIComponent.getCurrentComponent(FacesContext.getCurrentInstance();
// ...

请注意,这会将您的EL解析器紧密耦合到JSF。