-->

JSF 1.x ValueBinding is deprecated, what is the co

2020-07-08 07:33发布

问题:

I have some JSF 1.0/1.1 code:

FacesContext context = FacesContext.getCurrentInstance();
ValueBinding vb = context.getApplication().createValueBinding("#{someBean}");
SomeBean sb = (SomeBean) vb.getValue(context);

Since JSF 1.2, ValueBinding is deprecated and replaced by ValueExpression. I'm not sure how to change the above code in order to use ValueExpression.

回答1:

The part

ValueBinding vb = context.getApplication().createValueBinding("#{someBean}");
SomeBean sb = (SomeBean) vb.getValue(context);

should be replaced by

ValueExpression ve = context.getApplication().getExpressionFactory().createValueExpression(context.getELContext(), "#{someBean}", SomeBean.class);
SomeBean sb = (SomeBean) ve.getValue(context.getELContext());

or, better

SomeBean bc = context.getApplication().evaluateExpressionGet(context, "#{someBean}", SomeBean.class);

See also:

  • Get JSF managed bean by name in any Servlet related class
  • How to create dynamic JSF form fields