2015-04-14 6 views
2

Я изучаю JSF 2.2, и у меня есть небольшая проблема с поиском хорошего ответа, который я могу понять о том, как получить больше для проверки по параметру GET ,Подтвердить значение f: viewParam как один из избранных наборов допустимых значений

У меня есть файл source.xhtml, который имеет ссылку так:

<h:link value="ALTER" outcome="/main/showSqlTemplates.xhtml"> 
    <f:param name="type" value="ALTER" /> 
</h:link> 

и в моем destination.xhtml у меня есть код, который выглядит следующим образом:

<f:metadata> 
<f:viewParam id="type" name="type" value="#{showSqlTemplateManagedBean.type}" required="true" requiredMessage="Invalid page access. Please use a link from the menu."/>      
</f:metadata> 
<h:message for="type" class="bold"></h:message> 
<br/>TYPE is : #{showSqlTemplateManagedBean.type} 

и мой боб класс выглядит так:

@ManagedBean 
@RequestScoped 
public class ShowSqlTemplateManagedBean { 

    String type = ""; 

    public String getType() { 
     return type; 
    } 

    public void setType(String type) { 
     this.type = type; 
    } 

    public ShowSqlTemplateManagedBean() { 

    } 
} 

как вы можете видеть, я использовал атрибут «required», чтобы убедиться, что параметр типа i по крайней мере, там, и все работает нормально, насколько это возможно. Но я хотел бы сделать больше проверки.

В частности, я хочу убедиться, что значение типа String будет только ALTER, INSERT, UPDATE или DELETE.

Это где пользовательский валидатор? Пользовательский валидатор, кажется, слишком убит за такую ​​простую проверку проверки. Я уверен, что у меня что-то не хватает. Возможно, поместите что-то в метод PostConstruct init()?

ответ

3

Просто сделайте это enum.

@ManagedBean 
@RequestScoped 
public class ShowSqlTemplateManagedBean { 

    public enum Type { 
     ALTER, INSERT, UPDATE, DELETE; 
    } 

    private Type type; 

    public Type getType() { 
     return type; 
    } 

    public void setType(Type type) { 
     this.type = type; 
    } 

} 

JSF имеет встроенный конвертер для входов, который будет полностью прозрачным. Любое недопустимое значение приведет к ошибке преобразования, которую вы можете настроить с помощью атрибута converterMessage<f:viewParam>.

У перечислений больше преимуществ в другом месте кода.


Unrelated к конкретной задаче, явно инициализирует свойства с пустой строкой (или даже null) является плохой практикой. Больше не делай этого. Более того, инициализация управляемых компонентов bean-свойств с непустой строкой или не-null должна происходить в аннотированном методе @PostConstruct.

 Смежные вопросы

  • Нет связанных вопросов^_^