【发布时间】:2012-04-13 23:47:56
【问题描述】:
我正在寻找有关在 JSF 2.0 中添加字段错误突出显示的最佳方式的指导/意见。到目前为止,我已经成功地使用Cagatay's example 实现了一些小的逻辑调整。
String styleClass = ( String ) uiInput.getAttributes().get("styleClass");
//Check the valid flag
if ( !uiInput.isValid() )
{
//Component already has a styleclass
if ( styleClass != null )
{
//check if it's already highlighted
if ( !styleClass.contains("ui-input-invalid") )
{
//if not add the error class to it
styleClass = styleClass + " ui-input-invalid";
//and put the new styleclass back on the component
uiInput.getAttributes().put("styleClass", styleClass);
}
} else
{
//no current style class so just add the error class
uiInput.getAttributes().put("styleClass", "ui-input-invalid");
}
} else //component is valid so we might need to remove a highlight
{
//component has a styleclass
if ( styleClass != null )
{
//check if it is already highlighted
if ( styleClass.contains("ui-input-invalid") )
{
//remove error class from the string
styleClass = styleClass.replace("ui-input-invalid", "");
//and put the new styleclass back on the component
uiInput.getAttributes().put("styleClass", styleClass);
}
}
}
我还使用了将 el 添加到每个组件的样式类的建议 - styleClass="#{component.valid ? '' : 'ui-input-invalid'}"。
当与 Bean Validation JSR303 结合使用时,这两种方法都非常有效。但是,我还有 2 个额外的验证阶段。 1 验证整个表单,即字段的正确组合,1 验证字段和表单验证成功后的一般业务规则。为了让这些阶段也添加突出显示,我需要做一些手动工作。对于这两种突出显示的方法,我必须手动将组件有效标志设置为 false。为了访问该组件,我将它绑定到它自己的对象,格式为 vo。现在对于 Cagatay 的示例,我需要将所有组件添加到列表中,然后将此列表传递给突出显示方法。如果我使用 styleclass 方法,我不必担心组件列表和传递给突出显示的方法。这对我来说似乎是更好的方法,但我有点担心它会向 JSF 页面添加逻辑,这是我想远离的。
您认为最好的方法是什么,或者还有其他我不知道的方法吗?另外我假设没有其他方法可以在不绑定到组件的情况下设置有效标志?目前我必须绑定每个组件,以便设置其有效标志。
【问题讨论】:
标签: java jsf-2 bean-validation