XPages开发中inPlaceForms绑定独立Java beans的实现方法咨询
XPage托管Java Bean实现多条目就地编辑方案
完全支持同一类的对象列表绑定,不需要依赖HashMap做字段映射,以下是可直接落地的实现方案:
1. 核心架构设计
采用两层Bean结构即可实现和单表单绑定完全一致的开发体验:
- 外层列表托管Bean:作用域设置为
viewScope,配置为托管Bean,内部维护List<YourBizBean>类型的业务对象集合,可额外扩展编辑状态控制、批量保存等公共方法 - 内层业务对象POJO:不需要设置为托管Bean,是你自定义的普通Java类,封装单条数据的所有字段、字段校验规则、单条数据保存到后端Notes文档的逻辑,所有字段提供标准的get/set方法
2. 前端绑定逻辑
列表渲染绑定
展示多条目用的xp:repeat控件直接绑定到外层列表Bean的集合属性,示例代码:
<xp:repeat value="#{bizListBean.bizItemList}" var="currentBizItem" indexVar="itemIndex" id="repeatContainer">
就地编辑表单绑定
循环内部的就地编辑表单直接绑定到循环变量currentBizItem的对应字段,和单表单绑定Bean的写法完全一致,示例:
<!-- 只读状态展示 --> <xp:text value="#{currentBizItem.title}" id="titleDisplay" rendered="#{itemIndex != bizListBean.editingIndex}"> </xp:text> <!-- 编辑状态输入框 --> <xp:inputText value="#{currentBizItem.title}" id="titleInput" rendered="#{itemIndex == bizListBean.editingIndex}"> </xp:inputText> <!-- 保存按钮 --> <xp:button value="保存" id="saveBtn" rendered="#{itemIndex == bizListBean.editingIndex}"> <xp:eventHandler event="onclick" submit="true" refreshMode="partial" refreshId="repeatContainer"> <xp:this.action> <![CDATA[#{currentBizItem.save()}]]> </xp:this.action> </xp:eventHandler> </xp:button>
3. 常用扩展能力
- 单条编辑控制:在外层列表Bean中新增
editingIndex字段,默认值设为-1(代表无正在编辑的条目),点击编辑按钮时将当前条目索引赋值给该字段即可实现单次仅编辑一条的效果 - 批量提交:在外层列表Bean中新增
saveAll()方法,遍历内部的业务对象集合统一执行保存逻辑即可实现批量提交 - 校验逻辑复用:所有字段的合法性校验直接写在业务对象POJO的setter方法中,校验不通过时直接抛出
FacesException,XPages会自动将错误消息展示到前端
内容的提问来源于stack exchange,提问作者Vera Nentwich
相关产品推荐
相关产品推荐

