当前位置: 首页 > 知识库问答 >
问题:

SAP Spartacus表单个性化

常波鸿
2023-03-14

我需要修改注册表单以显示错误信息,如果已经有一个帐户注册了给定的电子邮件。SAP Hybris后端,斯巴达克斯店面棱角分明。目前,我有一个自定义验证器类,它可以正常工作:

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.',
            },
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);
    });

共有1个答案

黎阳冰
2023-03-14

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

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

如果希望以不同的方式处理来自特定endpoint的特定错误(例如,显示自定义消息/使用自定义转换键),则可能需要扩展方法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

 类似资料:
  • HTML5 表单属性 HTML5 新的表单属性 HTML5 的 <form> 和 <input>标签添加了几个新属性. <form>新属性: autocomplete novalidate <input>新属性: autocomplete autofocus form formaction formenctype formmethod formnovalidate formtarget heigh

  • HTML5 新的表单属性 HTML5 的 <form> 和 <input>标签添加了几个新属性. <form>新属性: autocomplete novalidate <input>新属性: autocomplete autofocus form formaction formenctype formmethod formnovalidate formtarget height 与 width l

  • 问题内容: 我试图坚持保持数据库规范化的做法,但这导致需要运行多个联接查询。如果许多查询使用联接而不是调用可能包含冗余数据的单个表,性能是否会下降? 问题答案: 直到发现瓶颈后,数据库才能正常化。然后,只有在仔细分析后,您才能对它们进行反规范化。 在大多数情况下,拥有一套覆盖面广的索引和最新的统计信息将可以解决大多数性能和阻塞问题,而不会进行任何非规范化。 如果对表进行写入和读取操作,则使用单个表

  • 问题内容: 我想知道什么是更有效和更快的性能: 在一个大表或多个没有索引的小表上有索引? 由于这是一个非常抽象的问题,让我使其更加实用: 我有一张表,该表包含有关用户的统计信息(20,000个用户,总共约3000万行)。该表有10列,包括,,等 最常见的应用是:通过插入数据和user_ID的检索数据(报表从不包含多个)。 到目前为止,我已经打开了,查询看起来像这样 现在,随着越来越多的行,表格变得

  • 我创建了一个jsp表单,它想将数据发送到两个表。这意味着我创建了两个模型类,所以表单应该引用这两个模型类。我试过了,但是失败了。如何从一个jsp页面获得两个模型属性并分配给一个控制器。提前感谢。 jsp表单 控制器

  • 在我的页面中,我有两个AMP表单,一个提交按钮放在第一个表单中,另一个div提交成功按钮放在第二个表单中。我如何在第二个表格中显示第一个表格提交的状态?