如何将参数值传递给java中的Conversion类?

时间:2011-08-03 18:00:27

标签: jsf

我正在尝试将值传递给JSF / SEAM中的转换类

public class ValueConverter implements Converter {

public Object getAsObject(FacesContext arg0, UIComponent arg1, String value) {
    if (StringUtils.isNotBlank(value)) {
    // logic etc here.

我的xhtml是:

<f:converter converterId="ValueConverter">
<f:attribute name="theMaxOrderSize" id="maxorder" value="#{_cartItem.item.maxOrderSize}"/>
</f:converter>

如何将参数值传递给java中的Conversion类?我开始错了吗?我在使用JSF 1.2我认为..

2 个答案:

答案 0 :(得分:6)

Bhesh完全正确。您应该在Validator内进行验证工作。

关于具体问题,请将<f:attribute>移出<f:converter>(或<f:validator>,如果您正在收听我们)进入输入组件,然后使用{{3}获得它。 E.g。

<h:inputText ...>
    <f:validator validatorId="valueValidator" />
    <f:attribute name="theMaxOrderSize" id="maxorder" value="#{_cartItem.item.maxOrderSize}"/>
</h:inputText>

Object theMaxOrderSize = component.getAttributes().get("theMaxOrderSize");
// ...

(其中componentUIComponent方法的validate()参数,它代表父输入组件

您可以将其强制转换为Integer#{_cartItem.item.maxOrderSize}所代表的任何对象类型。

答案 1 :(得分:3)

这是你应该用Validator做的事情。 Converter只是从String转换为Object,Object转换为String。您正尝试在转换器中进行验证。

  

如何将参数值传递给java中的Conversion类?

这不正确,您不需要将参数传递给Converter。它应该是 -

  

如何在JSF中访问Converter中的参数?

您可以使用FacesContext -

context.getExternalContext().getRequestParameterMap();

我认为你有很多要做的事情。祝你好运!

如果要向转换器添加属性,请使用StateHolder -

public class ValueConverter implements Converter, StateHolder {