Игнорирование только неверных параметров запроса в JSF - PullRequest
3 голосов
/ 15 ноября 2011

Я использую 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 и тип, также игнорируются.

Я бы хотел игнорировать только параметр limit в таком случае.Как мне этого добиться?

Ответы [ 2 ]

4 голосов
/ 15 ноября 2011

Создайте пользовательский конвертер, который не выбрасывает ConverterException, а просто возвращает null в случае сбоя преобразования.

Например

<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;
    }

}
2 голосов
/ 16 ноября 2011

Другой подход может заключаться в расширении существующего конвертера, перехвате исключения и возврате 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;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...