如何从UIComponent中的基础对象获取注释?

时间:2016-04-22 15:02:37

标签: java jsf-2 annotations bean-validation hibernate-validator

更新:我已更新我的问题以清除我的操作。

我正在尝试更新我工作的一些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属性?

我正在使用:

  • com.sun.faces.jsf-impl version:2.2.10;
  • org.hibernate.hibernate-validator version:4.3.2.Final
  • javax.validation.validation-api version:1.1.0.Final

0 个答案:

没有答案