Odata 如何显示展开元素的错误消息?

Odata 如何显示展开元素的错误消息?,odata,sapui5,Odata,Sapui5,我有一个SAPUI5应用程序,并使用以下机制在验证失败时显示错误(): 此解决方案适用于正常输入: 我所说的正常元素是什么意思 实际上,当它是一个显示扩展值的输入元素时,它不起作用,而当它没有扩展时,它起作用 例如,当元素为: <Input value="{ path: 'BusinessAddress/PostOfficeBox', type : 'sap.ui.model.type.String' , constraints:{search: '^[0-9]*$'}}"> B

我有一个
SAPUI5
应用程序,并使用以下机制在验证失败时显示错误():

此解决方案适用于正常输入:

我所说的正常元素是什么意思

实际上,当它是一个显示扩展值的输入元素时,它不起作用,而当它没有扩展时,它起作用

例如,当元素为:

<Input value="{ path: 'BusinessAddress/PostOfficeBox', type : 'sap.ui.model.type.String' , constraints:{search: '^[0-9]*$'}}">
BusinessAddress
是已展开的实体
ContactSet
的外键

显然,问题在于
sap.ui.core.message.message
实例的目标。
因此,我的问题是如何将错误消息作为扩展元素的目标

需要将处理器从
oDataModel
更改为
ControlMessageProcessor
。这意味着我们可以寻址控件本身,将错误消息绑定到其正确的显示位置,而不是模型中绑定数据的路径。大概是这样的:

var oMessageProcessor = new sap.ui.core.message.ControlMessageProcessor();
var oMessageManager  = sap.ui.getCore().getMessageManager();

oMessageManager.registerMessageProcessor(oMessageProcessor);

var oInput = new sap.m.Input({
    id: "myInputId",
    value: { path: "/Products(1)/Price" , type: new sap.ui.model.type.Float() }
});

oMessageManager.addMessages(
    new sap.ui.core.message.Message({
        message: "ZIP codes must have at least 23 digits",
        type: sap.ui.core.MessageType.Error,
        target: "/myInputId/value",
        processor: oMessageProcessor
     })
);
通过以控件本身为目标,将扩展属性绑定到控件并不重要

target: "/ContactSet('CO1')/BusinessAddress/PostOfficeBox"   ==> for expanded ones
target: "/ContactSet('CO1')/MobilePhone"
var oMessageProcessor = new sap.ui.core.message.ControlMessageProcessor();
var oMessageManager  = sap.ui.getCore().getMessageManager();

oMessageManager.registerMessageProcessor(oMessageProcessor);

var oInput = new sap.m.Input({
    id: "myInputId",
    value: { path: "/Products(1)/Price" , type: new sap.ui.model.type.Float() }
});

oMessageManager.addMessages(
    new sap.ui.core.message.Message({
        message: "ZIP codes must have at least 23 digits",
        type: sap.ui.core.MessageType.Error,
        target: "/myInputId/value",
        processor: oMessageProcessor
     })
);