我试图将值传递给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中的转换类?我一开始就错了吗?我想我使用的是JSF 1.2 .
Bhesh完全正确。您应该在Validator
中执行验证工作。
对于具体问题,将<f:attribute>
从<f:converter>
(或者<f:validator>
,如果你在听我们的话)移到输入分量中,然后使用UIComponent#getAttributes()
来获得它。例如
<h:inputText ...>
<f:validator validatorId="valueValidator" />
<f:attribute name="theMaxOrderSize" id="maxorder" value="#{_cartItem.item.maxOrderSize}"/>
</h:inputText>
Object theMaxOrderSize = component.getAttributes().get("theMaxOrderSize");
// ...
(其中component
是validate()
方法的UIComponent
参数,它代表父输入组件)
您可以将其强制转换为Integer
或#{_cartItem.item.maxOrderSize}
表示的任何对象类型
这是你应该用Validator做的事情。转换器只是将字符串转换为对象和对象转换为字符串。您正在尝试在转换器中验证。
如何将参数值传递给java中的转换类?
这是不正确的,您不需要将参数传递给Converter。应该是-
如何在JSF中访问转换器中的参数?
你可以使用FacesContext -
context.getExternalContext().getRequestParameterMap();
我想你有很多阅读要做。祝你好运!
如果你想为你的转换器添加属性,那么使用StateHolder -
public class ValueConverter implements Converter, StateHolder {