SAP Spartacus 表单个性化
SAP Spartacus form personalization
如果已经有一个帐户使用给定的电子邮件注册,我需要修改注册表单以显示错误消息。 SAP Hybris 后端,Angular 中的 Spartacus 店面。目前,我有一个自定义验证器 class,它可以正常工作:
import org.springframework.util.Assert;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
public class EmailExistingValidator implements Validator {
/*
...
*/
@Override
public void validate(Object o, Errors errors) {
Object fieldValue = errors.getFieldValue(this.fieldPath);
if (fieldValue == null || fieldValue instanceof String &&userIdExists((String) fieldValue)) {
errors.rejectValue(this.fieldPath, "field.required", new String[]{this.fieldPath}, "This email is already in use.");
}
}
}
如果是这样,店面会显示一条红色错误消息:“UID 无效”,但我想将其更改为“电子邮件地址无效或已被使用”。
我该怎么做?
当我调查这个问题时,店面中的这个字符串来自一个名为 validationError.invalid.uid 的常量,位于一个名为 spartacus-assets.js 的文件中,如下所示:
invalid: {
card_expirationMonth: 'The credit card expiration date entered is not valid.',
firstName: 'First Name entered is not valid.',
lastName: 'Last Name entered is not valid.',
password: 'Password entered is not valid.',
uid: 'UID is not valid.',
},
据我所知,确认 and/or 错误消息以某种方式填充(第 6 行):
handleValidationError(_request, response) {
this.getErrors(response)
.filter((e) => e.type === 'ValidationError')
.forEach((error) => {
this.globalMessageService.add({
key: `httpHandlers.validationErrors.${error.reason}.${error.subject}`,
}, GlobalMessageType.MSG_TYPE_ERROR);
});
这些都是开箱即用的,都位于 node_modules,所以我不能在这里重写东西,因为在 npm install 之后它们都会消失。
可以更改该消息吗?有什么办法可以解决这个问题吗?我错过了什么或者我错了?我欢迎任何评论,如您所知,我是 SAP Commerce 的新手。
目前 http 错误处理逻辑集中在 HttpErrorHandler 中 类。
HTTP 验证错误以通用方式处理 - 来自后端的错误类型和消息被转换为前端 translation key,然后翻译为当前语言并显示在前端的全局消息组件中 UI.
如果您想以不同方式处理来自某些特定端点的某些特定错误(例如显示自定义消息/使用自定义翻译键),您可能需要扩展方法 BadRequestHandler.handleValidationError()
或 .handleError()
.
如果已经有一个帐户使用给定的电子邮件注册,我需要修改注册表单以显示错误消息。 SAP Hybris 后端,Angular 中的 Spartacus 店面。目前,我有一个自定义验证器 class,它可以正常工作:
import org.springframework.util.Assert;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
public class EmailExistingValidator implements Validator {
/*
...
*/
@Override
public void validate(Object o, Errors errors) {
Object fieldValue = errors.getFieldValue(this.fieldPath);
if (fieldValue == null || fieldValue instanceof String &&userIdExists((String) fieldValue)) {
errors.rejectValue(this.fieldPath, "field.required", new String[]{this.fieldPath}, "This email is already in use.");
}
}
}
如果是这样,店面会显示一条红色错误消息:“UID 无效”,但我想将其更改为“电子邮件地址无效或已被使用”。
我该怎么做?
当我调查这个问题时,店面中的这个字符串来自一个名为 validationError.invalid.uid 的常量,位于一个名为 spartacus-assets.js 的文件中,如下所示:
invalid: {
card_expirationMonth: 'The credit card expiration date entered is not valid.',
firstName: 'First Name entered is not valid.',
lastName: 'Last Name entered is not valid.',
password: 'Password entered is not valid.',
uid: 'UID is not valid.',
},
据我所知,确认 and/or 错误消息以某种方式填充(第 6 行):
handleValidationError(_request, response) {
this.getErrors(response)
.filter((e) => e.type === 'ValidationError')
.forEach((error) => {
this.globalMessageService.add({
key: `httpHandlers.validationErrors.${error.reason}.${error.subject}`,
}, GlobalMessageType.MSG_TYPE_ERROR);
});
这些都是开箱即用的,都位于 node_modules,所以我不能在这里重写东西,因为在 npm install 之后它们都会消失。
可以更改该消息吗?有什么办法可以解决这个问题吗?我错过了什么或者我错了?我欢迎任何评论,如您所知,我是 SAP Commerce 的新手。
目前 http 错误处理逻辑集中在 HttpErrorHandler 中 类。
HTTP 验证错误以通用方式处理 - 来自后端的错误类型和消息被转换为前端 translation key,然后翻译为当前语言并显示在前端的全局消息组件中 UI.
如果您想以不同方式处理来自某些特定端点的某些特定错误(例如显示自定义消息/使用自定义翻译键),您可能需要扩展方法 BadRequestHandler.handleValidationError()
或 .handleError()
.