我正在使用f:viewparam
将GET请求参数捕获到JSF页面。
<f:metadata>
<f:viewParam name="id" value="#{mediaGroupController.mediaGroupId}"/>
<f:viewParam name="type" value="#{mediaGroupController.type}"/>
<f:viewParam name="limit" value="#{mediaGroupController.limit}" converter="javax.faces.Integer" >
<f:validateLongRange minimum="0"/>
</f:viewParam>
</f:metadata>
如果我为所有人输入有效参数,例如?id=1&type=foo&limit=10
,则此工作正常。但是,如果其中一个参数无效,例如?id=1&type=foo&limit=bar
,则还会忽略id和type等有效参数。
我想在这种情况下只忽略limit
参数。我怎样才能做到这一点?
答案 0 :(得分:4)
创建一个自定义转换器,它不会抛出ConverterException
,但只在转换失败时返回null
。
E.g。
<f:viewParam name="limit" value="#{mediaGroupController.limit}" converter="limitConverter">
与
@FacesConverter("limitConverter")
public class LimitConverter {
@Override
public Object getAsString(FacesContext context, UIComponent component, Object value) {
return (value != null) ? String.valueOf(value) : null;
}
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
return (value != null && value.matches("\\d+") ? Integer.valueOf(value) : null;
}
}
答案 1 :(得分:2)
另一种方法可能是扩展现有的转换器,并捕获异常并在这种情况下返回null
。
@FacesConverter("limitConverter")
public class LimitConverter extends IntegerConverter{
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
try {
return super.getAsString(context, component, value);
} catch (ConverterException e) {
return null;
}
}
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
try {
return super.getAsObject(context,component, value);
} catch (ConverterException e) {
return null;
}
}
}