我想知道这是否是一种仅针对impex触发我的验证码的方法。我的意思是我的代码应该验证通过Impex创建的新产品(而不是通过后台)。这是我的代码:
@Override
public void onValidate(final Object o, final InterceptorContext ctx) throws InterceptorException
if (o instanceof ProductModel)
{
final ProductModel product = (ProductModel) o;
if (ctx.isNew(product))
{
final String manufacturerName = enumerationService.getEnumerationName(product.getManufacturerName()); // if ManufacturerName is Null enumerationService throw "Parameter plainEnum must not be null!"
final String code = product.getCode().toString();
final String manufacturerProductId = product.getManufacturerProductId();
final int a = productLookupService.getProduct(code, manufacturerName, manufacturerProductId);
switch (a)
{
case 1:
throw new InterceptorException("Product already in ProductLookup");
case 2:
throw new InterceptorException(
"There are more than one product with the same " + code + " number in ProductLookup !");
default:
}
}
}
我的问题是,在BackOffice中,当我创建新产品时,我没有manufacturerName和manufacturerProductId字段。 谢谢!对不起,如果我说错了,我是新手:)
答案 0 :(得分:1)
您说“在BackOffice中,当我创建新产品时,我没有 manufacturerName 和 manufacturerProductId 字段“。 这也可能是Impex的情况。很可能你正在使用的impex现在指定这两个属性,这就是为什么没有问题。
如果需要,您可以强制执行这两个属性,然后没有人可以创建产品而不指定 manufacturerName产品 manufacturerProductId 。 我还认为backOffice会在创建过程中更新为包含这两个属性,因为它们是必需的。
您可以使用 optional <在 {extensionName} -items.xml (在您的类型定义下)指定属性是必需的/ em> 标志如下:
<attribute qualifier="manufacturerProductId" type="String">
<persistence type="property"/>
<modifiers optional="false"/>
</attribute>
如果这两个属性不是强制性的,那么您必须考虑在没有它们的情况下创建产品的情况(就像您当前的backOffice情况)。 但是你的拦截器应该考虑两个情况(当你在创建期间指定了这些属性时当你没有时)
因此,您可以编辑代码以在使用它们之前验证这两个属性是否为null。您可以在尝试获取manufacturerName之前添加此权限:
if (product.getManufacturerName() == null || product.getManufacturerProductId() == null) {
return;
}