如何验证是否存在外键条目?

时间:2011-12-25 12:17:04

标签: jsf jpa jsf-2 jpa-2.0

我的Customer表中有外键。

@JoinColumn(name = "DISCOUNT_CODE", referencedColumnName = "DISCOUNT_CODE")
@ManyToOne(optional = false)
private DiscountCode discountCode;

我有一个包含此表的所有字段的表单(包括外键discountCode及其他表中的描述)。

我希望能够在用户输入外键表中不存在的输入时显示该外键不存在的消息。 当我开始研究这个领域时,我正在从表中重新描述它的描述。当用户对其进行处理并且表中不存在时,如何显示无效字段的错误消息?

1 个答案:

答案 0 :(得分:4)

您需要的是Validator。它应该是这样的:

@ManagedBean
@RequestScoped
public class DiscountCodeValidator implements Validator {
    @EJB
    private MrBean mrBean;

    @Override
    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
        String discountCode = (String) value;

        if (!mrBean.checkDiscountCodeExistence(discountCode)) {
            throw new ValidatorException(new FacesMessage("This code is not valid!"));
        }
    }
}

在.xhtml文件中,您可以将此验证程序声明如下:

<h:inputText id="discountCode" value="#{someBean.discountCode}" 
             validator="#{discountCodeValidator}" 
             required="true" requiredMessage="Discount code is required.">
   <f:ajax event="blur" render="discountMsg" />
</h:inputText>
<h:message for="discountCode" id="discountMsg"/>

有一点需要注意的是,我假设你会注入一个EJB来检查带有checkDiscountCodeExistence()函数的折扣代码是否存在。因此,我将上述Validator注释为@ManagedBean。如果您不需要注入任何EJB,则可以使用@FacesValidator注释Validator。