如何显示扩展元素的错误消息?
How can I show error message for expanded elements?
我有一个 SAPUI5
应用程序并使用以下机制显示错误以防验证失败 (documentation):
oMessage = new sap.ui.core.message.Message({
message: (typeof sText === "string" && sText.trim().length > 0) ? sText : ex.message,
type: MessageType.Error,
target: (oControlBinding.getContext() ? oControlBinding.getContext().getPath() + "/" : "") + oControlBinding.getPath(),
processor: oControlBinding.getModel()
});
this._aMessages[oControl.getId()] = oMessage;
sap.ui.getCore().getMessageManager().addMessages(oMessage);
此解决方案适用于正常输入:
普通元素是什么意思???
实际上,当它是一个显示扩展值的输入元素时,它不起作用,而当它未扩展时,它起作用。
例如当元素是:
<Input value="{ path: 'BusinessAddress/PostOfficeBox', type : 'sap.ui.model.type.String' , constraints:{search: '^[0-9]*$'}}">
其中显示扩展值没有得到错误信息框。
但对于具有类似 value="{ path: 'MobilePhone', type: 'sap.ui.model.type.String', constraints: {search: '^[0-9]+$'}}"
路径的元素,它会显示错误消息。
代码段生成的两个oMessage
对象的区别是:
target: "/ContactSet('CO1')/BusinessAddress/PostOfficeBox" ==> for expanded ones
BusinessAddress
是实体ContactSet
的外键,已展开
和
target: "/ContactSet('CO1')/MobilePhone"
很明显问题出在 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
})
);
通过将控件本身作为目标,我们将扩展的 属性 绑定到控件并不重要。
我有一个 SAPUI5
应用程序并使用以下机制显示错误以防验证失败 (documentation):
oMessage = new sap.ui.core.message.Message({
message: (typeof sText === "string" && sText.trim().length > 0) ? sText : ex.message,
type: MessageType.Error,
target: (oControlBinding.getContext() ? oControlBinding.getContext().getPath() + "/" : "") + oControlBinding.getPath(),
processor: oControlBinding.getModel()
});
this._aMessages[oControl.getId()] = oMessage;
sap.ui.getCore().getMessageManager().addMessages(oMessage);
此解决方案适用于正常输入:
普通元素是什么意思???
实际上,当它是一个显示扩展值的输入元素时,它不起作用,而当它未扩展时,它起作用。
例如当元素是:
<Input value="{ path: 'BusinessAddress/PostOfficeBox', type : 'sap.ui.model.type.String' , constraints:{search: '^[0-9]*$'}}">
其中显示扩展值没有得到错误信息框。
但对于具有类似 value="{ path: 'MobilePhone', type: 'sap.ui.model.type.String', constraints: {search: '^[0-9]+$'}}"
路径的元素,它会显示错误消息。
代码段生成的两个oMessage
对象的区别是:
target: "/ContactSet('CO1')/BusinessAddress/PostOfficeBox" ==> for expanded ones
BusinessAddress
是实体ContactSet
的外键,已展开
和
target: "/ContactSet('CO1')/MobilePhone"
很明显问题出在 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
})
);
通过将控件本身作为目标,我们将扩展的 属性 绑定到控件并不重要。