screen widget

org.ofbiz.widget.screen.ScreenWidgetViewHandler
我们在使用screen widgets(小窗口)的时候是使用这个处理器处理的。
因此需要在controller.xml文件加入handler
<handler name="screen" type="view" class="org.ofbiz.widget.screen.ScreenWidgetViewHandler" />
这里的name决定了
view-map的type
这里可以在RequestHandler类得代码中看出来,ofbiz10大概是
841行,代码
ViewHandler vh = viewFactory.getViewHandler(viewMap.type);
这里根据viewMap.type(这个是type值=<view-map name="SimplestScreen" type="screen"设置的type),
它从viewFactory的handers(一个map,将hander的name作为key,实例作为value)中取出处理器,handers有一个默认指是
default=org.ofbiz.webapp.view.JspViewHandler@8202f7
如上的配置,那么还有一个就是
screen=org.ofbiz.widget.screen.ScreenWidgetViewHandler@13018ca

try {
if (Debug.verboseOn()) Debug.logVerbose("Rendering view [" + nextPage + "] of type [" + viewMap.type + "]", module);
ViewHandler vh = viewFactory.getViewHandler(viewMap.type);
vh.render(view, nextPage, viewMap.info, contentType, charset, req, resp);
} catch (ViewHandlerException e) {
Throwable throwable = e.getNested() != null ? e.getNested() : e;

throw new RequestHandlerException(e.getNonNestedMessage(), throwable);
}

现在写我们的screen了
<?xml version="1.0" encoding="UTF-8"?>

<screens xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:noNamespaceSchemaLocation="http://www.ofbiz.org/dtds/widget-screen.xsd">

<screen name="SimplestScreen">

<section>

<widgets>

<label text="Simplest Screen possible in OFBiz!" />

</widgets>

</section>

</screen>

</screens>

根节点是screens
可以包含多个screen,每个screen都有name。

在controller.xml文件的handler之后写入

<!-- Request Mappings -->

<request-map uri="SimplestScreen">

<response name="success" type="view" value="SimplestScreen" />

</request-map>

<!-- end of request mappings -->

request-map 的uri决定当访问的资源(资源的解析方式在ControlServlet解释)。
当返回成功(success)的时候,就转到view,需要处理的view是叫做SimplestScreen

配置view在controller.xml
<!--这里的type就是handler 的name-->
<view-map name="SimplestScreen" type="screen"
page="component://learning/widget/LearningScreens.xml#MyScreen"></view-map>
另外这里有一个组件引用的例子,就是
page="component://learning/widget/LearningScreens.xml#MyScreen"
这里指定了资源路径是component://learning learning组件下面开始的

widget或者fail-widgets可以再包含section元素
这个时候,包含的内部的section和外部的screen使用的是同一个似有容器空间。


<include-screen name="SimplestScreen" />
使用的是两个不同的容器空间。
但是外部的空间在内部(include)中可以访问,如果内部空间覆盖了外部的值(这里的覆盖不是值得覆盖,而是说在内部的空间也定义了同一个名字的变量),它就访问自己的空间的变量。如果没有覆盖,它会层层往上寻找,直到找到你要访问的名字的变量,如果没找到,就是空内容了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值