backbase 是一个企业级的AJAX框架
它分成二部分 js引挚bpc(backbase presentation client)和标签(B,S)
它的命名空间是xmlns:b=http://www.backbase.com/b,xmlns:s=http://www.backbase.com/s
BXML 是 stands forBackbase eXtensible Markup Language
三部分:
System tags (s:tags)
Backbase controls (b:tags)
Generic attributes (b:tags)
Events and commands (b:tags)
XPathis a language for addressing parts of anXMLdocument
以下是一些问题的解答
xml 代码
- 1. How to access data entered to the datagrid by the user?
- 每个能够编辑的列都有一个控件实例来供用户输入新的值,这个控件实例就在<b:datatype>中定义,并且这个实例被整个列的所有单元格共享。如果想在用户输入之后立即得到新值,可以相应这个实例的blur事件,用户输入的值一般在value 属性中存储。例如:
- <b:datatype b:name="text">
- <input type="text" value="default" >
- <s:event b:on="blur">
- <s:task b:action="alert" b:value="{@value}" />
- s:event>
- input>
- b:datatype>
- 选中的单元格的HTML引用在b:datagrid实例的datagrid-selected-cells 变量中存储。访问这个变量就可以知道当前选中的单元格。
- 如果想在用户对整个页面编辑之后一起提交所有的更改。可以使用如下代码:
- <b:button>send changes
- <s:event b:on="command">
- <s:task b:action="send" b:source="id('datagrid1')/b:datagridbody/html()/table/tbody/tr[@b:status]" b:destination="id('datagrid1')" b:url="response.jsp" b:mode="replace" />
- <s:task b:action="remove" b:target="id('datagrid1')/b:datagridbody/html()/table/tbody/tr/@b:status" />
- s:event>
- b:button>
- 在上述代码中,datagrid的id是datagrid1,当用户点击这个按钮的时候,就会把所有编辑过的行发送到服务器端。并用服务器返回的新的整个的datagrid数据替换现有的。 注意,一旦有一个单元格被编辑过,它所在行的b:status属性就被摄制了updated,当提交完所有的更改之后需要手动删除这个属性,以恢复到其初始状态。当然服务器返回的数据可以是一个成功与否的标志,不需要是整个datagrid的数据,如果想手动解析服务器返回数据,可以把返回的数据存储到一个变量中。这个变量在send task的b:destination属性中被指定。
- 2. Can you control only loading the focused window?
- B:window的b:open属性指定是否默认状态下窗口是显示的,并不制定何时装载窗口数据。如果需要当窗口打开的时候再装载数据,可以手动相应b:window的show事件。并用load命令装载数据并插入到窗口中。请看如下代码:
- <b:button>
- load on open
- <s:event b:on="command">
- <s:task b:action="show" b:target="id('window')"/>
- s:event>
- b:button>
- <b:window id="window" b:open="false" style="left:100px; top:100px">
- <b:windowhead>
- Title
- b:windowhead>
- <b:windowbody>
- b:windowbody>
- <s:event b:on="show">
- <s:task b:action="load" b:url="iframe.xml" b:destination="b:windowbody" b:mode="replacechildren" b:test="count(b:windowbody/*) = 0" />
- s:event>
- b:window>
- 其中的iframe.xml文件包含了<iframe> tag, 比如:
- xml version=”1.0”?>
- <iframe src=”f.do?” style=”width:100%;height:100%;overflow:hidden;”>iframe>
- 3. How to control add/delete new records in the datagrid?
- 在客户端删除行可以调用datagrid的delete-row方法。请看如下代码:
- <div>
- Delete selected rows
- <s:event b:on=”command”>
- <s:task b:action="trigger" b:event="delete-row" b:target="id(datagrid1)" />
- s:event>
- div>
- 当行被删除以后此行的b:status属性会被自动设置成deleted.可以用xpath检测这个属性来得知那些行被删除了,以便提交到服务器端,类似的检测和提交代码请参照第一个问题的示例代码。
- 添加新行需要首先发送一些数据通知服务器端,告诉服务器需要添加一个新行,同时也可以使用一些初始化值,然后等待服务器端发送整个datagrid,包含已经添加的新行到客户端。
- 发送添加新行的通知可以使用send命令,例子如下:
- <b:button>
- Add New Row
- <s:event b:on="command">
- <s:variable b:name="request">
- <request>
- <addrow>
- <cell>this is initial data for column 1cell>
- <cell>this is initial data for column 2cell>
- addrow>
- request>
- s:variable>
- <s:task b:action="send" b:url="server.jsp" b:source="$request" b:destination="id('datagrid1')" b:mode="replace" b:autoroot="false" />
- s:event>
- b:button>