将 f:viewParam 值验证为 select 一组允许值之一
Validate f:viewParam value to be one of a select set of allowable values
我正在学习 JSF 2.2,但我很难找到一个我能理解的关于如何对 GET 参数进行更多验证的好答案。
我有一个 source.xhtml 文件,其中有一个 link 是这样的:
<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}
我的豆子 class 看起来像这样:
@ManagedBean
@RequestScoped
public class ShowSqlTemplateManagedBean {
String type = "";
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public ShowSqlTemplateManagedBean() {
}
}
如您所见,我使用了 "required" 属性来确保类型参数至少存在并且一切正常。但我想做更多的验证。
具体来说,我想确保 String 类型的值只会是 ALTER、INSERT、UPDATE 或 DELETE。
这是自定义验证器的用武之地吗?对于这样一个简单的验证检查,自定义验证器似乎已经过时了。我确定我错过了什么。也许在 PostConstruct init() 方法中添加一些东西?
只需将其设为 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 有一个内置的枚举转换器,它将完全透明地启动。任何无效值都会导致转换错误,您可以通过 <f:viewParam>
.
的 converterMessage
属性自定义该错误
枚举在代码的其他地方也有更多好处。
与具体问题无关,用空字符串(甚至null
)显式初始化属性是不好的做法。不要再那样做了。此外,使用非空字符串或非空字符串初始化托管 bean 属性应该发生在 @PostConstruct
注释方法中。
我正在学习 JSF 2.2,但我很难找到一个我能理解的关于如何对 GET 参数进行更多验证的好答案。
我有一个 source.xhtml 文件,其中有一个 link 是这样的:
<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}
我的豆子 class 看起来像这样:
@ManagedBean
@RequestScoped
public class ShowSqlTemplateManagedBean {
String type = "";
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public ShowSqlTemplateManagedBean() {
}
}
如您所见,我使用了 "required" 属性来确保类型参数至少存在并且一切正常。但我想做更多的验证。
具体来说,我想确保 String 类型的值只会是 ALTER、INSERT、UPDATE 或 DELETE。
这是自定义验证器的用武之地吗?对于这样一个简单的验证检查,自定义验证器似乎已经过时了。我确定我错过了什么。也许在 PostConstruct init() 方法中添加一些东西?
只需将其设为 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 有一个内置的枚举转换器,它将完全透明地启动。任何无效值都会导致转换错误,您可以通过 <f:viewParam>
.
converterMessage
属性自定义该错误
枚举在代码的其他地方也有更多好处。
与具体问题无关,用空字符串(甚至null
)显式初始化属性是不好的做法。不要再那样做了。此外,使用非空字符串或非空字符串初始化托管 bean 属性应该发生在 @PostConstruct
注释方法中。