更新:我已更新我的问题以清除我的操作。
我正在尝试更新我工作的一些legancy代码。我正在使用JSF验证 我想在实体上使用带有注释的JSR-303/349。
我使用生成的html和jQuery代码来使这些验证在客户端工作,因为我不能只在实体上添加注释。以下是我的TextRenderer代码示例:
import com.sun.faces.renderkit.html_basic.TextRenderer;
import java.io.IOException;
import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import javax.faces.context.ResponseWriterWrapper;
public class UiRender extends TextRenderer {
@Override
protected void getEndTextToRender(FacesContext context, UIComponent component, String currentValue)
throws IOException {
if (component instanceof UIInput) {
final UIInput uiInput = (UIInput) component;
final ResponseWriter originalResponseWriter = context.getResponseWriter();
context.setResponseWriter(new ResponseWriterWrapper() {
@Override
public ResponseWriter getWrapped() {
return originalResponseWriter;
}
@Override
public void startElement(String name, UIComponent component) throws IOException {
super.startElement(name, component);
super.writeAttribute("required", uiInput.isRequired(), null); //<- here i got required attribute
super.writeAttribute("requiredMessage", uiInput.getRequiredMessage(), null);//<- here i got requiredMessage
}
});
super.getEndTextToRender(context, component, currentValue);
context.setResponseWriter(originalResponseWriter); // Restore original writer.
}
}
}
要使用此渲染,我可以在“inputText”标记上使用“required”和“requiredMessage”attritube。 例如:
<h:inputText id="field"
value="#{bean.myObject.field}"
required="true"
requiredMessage="Field is required" />
这会渲染一个像这样的HTML:
而且,在执行操作之前,我可以使用这样的jQuery代码:
function validateInputTextWithRequiredAttribute() {
var msg = '';
$('input:visible[required="required"]').each(
function () {
if ($(this).val() === '') {
msg += $(this).attr("requiredmessage") + '<br/>'
}
}
);
if (msg) {
showErrorMessage(msg);
return false;
}
return true;
}
我想使用Bean Validation来像这样使用类MyObject:
public class MyObject{
@NotNull SomeField field;
}
有没有简单的方法可以在UiRender上获取@NotNull信息或知道“SomeField”是否具有NotNull属性?
我正在使用: