我正在尝试一些bean验证,并且绊倒了“奇怪”的行为。我正在使用Glassfish和Primefaces作为前端(如果有任何区别)。在我项目的其他地方,我使用了Hibernate-
validator,我不确定它是否在验证JSF(否则,它是Glassfish中的默认值)。我有一个托管bean:
@javax.faces.bean.ManagedBean
@javax.faces.bean.ViewScoped
public class TestBean
{
@Size(min=8)
private String _testString;
public String getTestString()
{
return _testString;
}
public String setTestString(String testString)
{
_testString = testString;
}
public void doSomethind()
{
// Do something with the test string
}
}
还有一个包含以下内容的JSF页面:
<h:form id="testForm">
<h:outputLabel for="testInput" value="Input:"/>
<p:inputText id="testInput" value="#{testBean.testString}"/>
<p:message id="testInputMsg" for="testInput"/>
<p:commandButton value="Aanmaken" action="#{testBean.doSomething}" update="@form"/>
</h:form>
在_testString
没有得到验证这种方式。但是,当我将字段更改为以下内容时,bean验证确实起作用:
@Size(min=8)
private String testString;
或当我代替现场注释吸气剂时:
private String _testString;
@Size(min=8)
public String getTestString()
{
return _testString;
}
遵循我们的编码准则,我们必须在私有字段前面加上下划线。这给了我一个选择。注释吸气剂。
有人可以解释一下为什么它会这样吗?
根据JSR
303规范
:
3.2。约束声明
约束声明主要通过注释放置在类或接口上。约束注释(请参阅第2.1节)可以应用于类型,任何类型的字段或任何与 JavaBeans兼容的 属性。
(强调我的)
根据JavaBeans规范:
8.3.1简单属性
默认情况下,我们使用设计模式通过查找以下形式的方法来定位属性:
public <PropertyType> get<PropertyName>(); public void set<PropertyName>(<PropertyType> a);
因此,属性名称为_testString
,它正在寻找一个名为getter / setter的getter / setter
get_testString()
,set_testString()
在您的情况下不存在。
您的代码准则与JavaBeans规范冲突,因此,当您将注释放在名称与JavaBeans规范冲突的属性上时,JSR-303
bean验证将根本无法工作。JSR-303找不到与属性名称关联的getter / setter,因此在调用它们时将无法执行验证。
修改代码准则以符合标准,或者将注释放在getter上并使用它。另请参见标准Java代码约定。
问题内容: JavaScript中的下划线前缀仅是约定,例如Python私有类方法中的约定吗? 从2.7 Python文档中: Python中不存在只能从对象内部访问的“私有”实例变量。但是,大多数Python代码遵循一个约定:以下划线开头的名称(例如_spam)应被视为API的非公开部分(无论是函数,方法还是数据成员) 。 这也适用于JavaScript吗? 以下面的JavaScript代码为例
问题内容: 即使在今天,我经常在Java变量和方法中看到下划线,例如成员变量(例如“ m_count”或“ _count”)。据我所记得,在这种情况下使用下划线被Sun称为坏样式。 应该使用它们的唯一位置是常量(例如“ public final static int IS_OKAY = 1;”中的常量),因为常量应该全部为大写而不是驼峰式。在这里,下划线应使代码更具可读性。 您认为在Java中使用
问题内容: 我正在使用go,特别是QT绑定。但是,我不理解以下结构中前导下划线的使用。我知道一般使用下划线,但不知道此特定示例。 它与struct标签有关吗? 问题答案: 这些称为空白字段,因为空白标识符用作字段名称。 不能引用它们(就像任何以空白标识符作为名称的变量一样),但它们会参与结构的内存布局。通常,实际上,它们被用作填充,以将后续字段与字节位置(或内存位置)对齐,以匹配来自(或进入)另一
我正在尝试利用Laravel的登录页路径。例如,默认情况下,Laravel会将您带到欢迎页面,并且斜杠后没有url文本。 在我的欢迎页面中,我使用以下条件根据路线名称应用样式。 然而,此代码不工作。如何正确查看欢迎页面的路线? 编辑:使用“请求”而不是“路由”使其工作。然而,为了保持一致性,我想知道是否也可以使用“路线”来完成。
我想在Spring Boot应用程序中设置。我想使用环境变量来设置它。 Spring Boot相当方便地将所有环境变量从转换为Spring上下文中称为的属性。 如何在Spring Boot中使用环境变量设置目标名称中有下划线的属性?大概会被翻译成?
问题内容: 问题是阿拉伯文字未打印-请谁能解决我的问题? 问题答案: 删除并将编码更改为,这应该使您的字符