screen,menu,form等里面的action

以screen为例
其他类似

screen的action内容是由
ModelScreenAction负责处理的。
其他类似的还有
ModelFormAction
ModelMenuAction
ModelTreeAction

其方法
是读取每个子元素,并初始化处理方式的。
先看
property-map的处理是由 actions.add(new PropertyMap(modelScreen, actionElement));
PropertyMap负责处理的。
public static List<ModelScreenAction> readSubActions(ModelScreen modelScreen, Element parentElement) {
List<ModelScreenAction> actions = FastList.newInstance();

List<? extends Element> actionElementList = UtilXml.childElementList(parentElement);
for (Element actionElement: actionElementList) {
if ("set".equals(actionElement.getNodeName())) {
actions.add(new SetField(modelScreen, actionElement));
} else if ("property-map".equals(actionElement.getNodeName())) {
actions.add(new PropertyMap(modelScreen, actionElement));
} else if ("property-to-field".equals(actionElement.getNodeName())) {
actions.add(new PropertyToField(modelScreen, actionElement));
} else if ("script".equals(actionElement.getNodeName())) {
actions.add(new Script(modelScreen, actionElement));
} else if ("service".equals(actionElement.getNodeName())) {
actions.add(new Service(modelScreen, actionElement));
} else if ("entity-one".equals(actionElement.getNodeName())) {
actions.add(new EntityOne(modelScreen, actionElement));
} else if ("entity-and".equals(actionElement.getNodeName())) {
actions.add(new EntityAnd(modelScreen, actionElement));
} else if ("entity-condition".equals(actionElement.getNodeName())) {
actions.add(new EntityCondition(modelScreen, actionElement));
} else if ("get-related-one".equals(actionElement.getNodeName())) {
actions.add(new GetRelatedOne(modelScreen, actionElement));
} else if ("get-related".equals(actionElement.getNodeName())) {
actions.add(new GetRelated(modelScreen, actionElement));
} else {
throw new IllegalArgumentException("Action element not supported with name: " + actionElement.getNodeName());
}
}

return actions;
}


PropertyMap 是ModelScreenAction的子类,它的实现如下

@Override
public void runAction(Map<String, Object> context) {
String globalStr = this.globalExdr.expandString(context);
// default to false
boolean global = "true".equals(globalStr);

Locale locale = (Locale) context.get("locale");
String resource = this.resourceExdr.expandString(context, locale);

ResourceBundleMapWrapper existingPropMap = this.mapNameAcsr.get(context);
if (existingPropMap == null) {
this.mapNameAcsr.put(context, UtilProperties.getResourceBundleMap(resource, locale, context));
} else {
try {
existingPropMap.addBottomResourceBundle(resource);
} catch (IllegalArgumentException e) {
// log the error, but don't let it kill everything just for a typo or bad char in an l10n file
Debug.logError(e, "Error adding resource bundle [" + resource + "]: " + e.toString(), module);
}
}

if (global) {
Map<String, Object> globalCtx = UtilGenerics.checkMap(context.get("globalContext"));
if (globalCtx != null) {
ResourceBundleMapWrapper globalExistingPropMap = this.mapNameAcsr.get(globalCtx);
if (globalExistingPropMap == null) {
this.mapNameAcsr.put(globalCtx, UtilProperties.getResourceBundleMap(resource, locale, context));
} else {
// is it the same object? if not add it in here too...
if (existingPropMap != globalExistingPropMap) {
try {
globalExistingPropMap.addBottomResourceBundle(resource);
} catch (IllegalArgumentException e) {
// log the error, but don't let it kill everything just for a typo or bad char in an l10n file
Debug.logError(e, "Error adding resource bundle [" + resource + "]: " + e.toString(), module);
}
}
}
}
}
}
}

这里顺带提下
最后会调用UtilProperties的resolvePropertiesUrl方法来生成实际的资源名字。
这个方法有代码

url = FlexibleLocation.resolveLocation(resourceName + ".properties");
if (url != null) {
return url;
}
// Check for Java XML properties file
url = FlexibleLocation.resolveLocation(resourceName + ".xml");
if (url != null) {
return url;
}

可见ofbiz10.4是先查询properties文件是否存在,再检查xml文件是否存在。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值