Проверьте, чтобы значение f:viewParam было одним из выбранного набора допустимых значений.
Я изучаю JSF 2.2, и у меня возникли небольшие проблемы с поиском хорошего ответа, который я могу понять, как получить больше для проверки параметра GET.
У меня есть файл 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", чтобы убедиться, что параметр type хотя бы есть, и все работает нормально, насколько это возможно. Но я хотел бы сделать больше проверки.
В частности, я хочу убедиться, что значение типа String будет только ALTER,INSERT,UPDATE OR DELETE.
Это где пользовательский валидатор приходит? Пользовательский валидатор кажется слишком сложным для такой простой проверки. Я уверен, что что-то упустил. Может быть, положить что-то в методе PostConstruct init()?
1 ответ
Просто сделай это 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>
,
Enums также имеют больше преимуществ в других частях кода.
Не имеет отношения к конкретной проблеме, явно инициализируя свойства пустой строкой (или даже null
) это плохая практика. Не делай этого больше. Более того, инициализация свойств управляемого компонента с непустой строкой или ненулевым должна происходить в @PostConstruct
аннотированный метод.