SAP Spartacus 表单个性化

Posted

技术标签:

【中文标题】SAP Spartacus 表单个性化【英文标题】:SAP Spartacus form personalization 【发布时间】:2022-01-14 02:07:27 【问题描述】:

如果已经有使用给定电子邮件注册的帐户,我需要修改注册表以显示错误消息。 SAP Hybris 后端,Angular 中的 Spartacus 店面。目前,我有一个自定义验证器类,它可以正常工作:

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.',
            ,

据我所知,确认和/或错误消息的填充方式如下(第 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 之后它们都会消失。

可以更改该消息吗?有什么办法可以解决这个问题吗?我错过了什么还是我错了?我欢迎任何 cmets,如您所知,我是 SAP Commerce 的新手。

【问题讨论】:

【参考方案1】:

目前,http 错误处理逻辑集中在 HttpErrorHandlers 类中。

http 验证错误以通用方式处理 - 来自后端的错误类型和消息被转换为前端 translation key,然后转换为当前语言并显示在前端 UI 的全局消息组件中。

如果您想以不同方式处理来自某些特定端点的某些特定错误(例如,显示自定义消息/使用自定义翻译键),您可能需要扩展方法 BadRequestHandler.handleValidationError().handleError()

查看源码:https://github.com/SAP/spartacus/blob/1b22bf5376c1fc5a88877aaaf4682f1838347b90/projects/core/src/global-message/http-interceptors/handlers/bad-request/bad-request.handler.ts#L64-L78

【讨论】:

以上是关于SAP Spartacus 表单个性化的主要内容,如果未能解决你的问题,请参考以下文章