自定义颜色显示填报时校验出错的数据

本文介绍润乾报表中如何设定数据提交前的校验规则,包括错误数据的提示及自定义标注颜色的方法,展示了通过JS函数接口实现个性化错误标注的过程。

润乾填报表可以设定数据提交前的校验规则,不满足规则的数据,除了可以弹出提示信息外,还可以在填报数据的页面以特殊颜色标识出错数据,默认使用红色,当然也可以根据需要自定义颜色。

首先我们看一下设置校验后,数据出现错误后的效果。

以报表设计器下自带的 7.1.sht 为例,我们在 H3 单元格添加了校验规则:工资不能大于 1.2W。

1png

在页面上我们对数据进行修改,当鼠标光标失去焦点后,就会弹出提示并标红刚刚修改的不符合规则的数据,效果如下图所示:

2png

如果用户想换用别的标注方式,可以在 jsp 中通过实现 js 函数接口来修改,接口定义如下:

function markInvalidCellUser(cell, addMark) {

    // 用户程序代码

}

参数 cell 表示需要标注的单元格对象,addMark 是 bool 型,true 表示要添加标注,false 表示要清除标注。

下面是系统的标注函数,供参考

function _markInvalidCellDefault(cell, addMark) {

var oldbk = cell.getAttribute(“oldbk”);

if(addMark) {   // 添加标记

if(oldbk != null) return;   // 标记过的,不用再标记了

cell.setAttribute(“oldbk”, cell.style.backgroundColor);

cell.style.backgroundColor = “red”;

var table = _lookupTable(cell);

if(table.currEditor != null && table.currEditor.editingCell == cell) {  //cell 是当前编辑单元格

_setEditorStyle(table.currEditor, cell);

}

}

else {   // 清除标记

if(oldbk != null) {  // 说明有标记过

cell.style.backgroundColor = oldbk;

cell.removeAttribute(“oldbk”);

}

}

}

我们在填报表展现的页面 showInput.jsp 中添加这个 JS,将 red 改成 pink,如果再修改数据,出现的效果就是我们所设定的粉色了。

3png
更多填报相关文章请查看:填报
填报表实现隔行异色的效果
报表工具之数据校验竟可以如此简单
填报流水号,缺省表达式设置
填报表中也可以添加 html 事件

基于模拟退火的计算器 在线运行 访问run.bcjh.xyz。 先展示下效果 https://pan.quark.cn/s/cc95c98c3760 参见此仓库。 使用方法(本地安装包) 前往Releases · hjenryin/BCJH-Metropolis下载最新 ,解压后输入游戏内校验码即可使用。 配置厨具 已在2.0.0弃用。 直接使用白菜菊花代码,保留高级厨具,新手池厨具可变。 更改迭代次数 如有需要,可以更改 中39行的数字来设置迭代次数。 本地编译 如果在windows平台,需要使用MSBuild编译,并将 改为ANSI编码。 如有条件,强烈建议这种本地运行(运行可加速、可多次重复)。 在 下运行 ,是游戏中的白菜菊花校验码。 编译、运行: - 在根目录新建 文件夹并 至build - - 使用 (linux) 或 (windows) 运行。 最后在命令行就可以得到输出结果了! (注意顺序)(得到厨师-技法,表示对应新手池厨具) 注:linux下不支持多任务选择 云端编译已在2.0.0弃用。 局限性 已知的问题: - 无法得到最优解! 只能得到一个比较好的解,有助于开阔思路。 - 无法选择菜品数量(默认拉满)。 可能有一定门槛。 (这可能有助于防止这类辅助工具的滥用导致分数膨胀? )(你问我为什么不用其他语言写? python一个晚上就写好了,结果因为有涉及json读写很多类型没法推断,jit用不了,算这个太慢了,所以就用c++写了) 工作原理 采用两层模拟退火来最大化总能量。 第一层为三个厨师,其能量用第二层模拟退火来估计。 也就是说,这套方法理论上也能算厨神(只要能够在非常快的间内,算出一个厨神面板的得分),但是加上厨神的食材限制工作量有点大……以后再说吧。 (...
### 实现 FineReport 填报报表数据自定义提交功能 在 FineReport 中实现填报报表数据自定义提交功能,可以通过以下方式完成。FineReport 提供了灵活的扩展机制,允许开发者通过 Java 代码自定义数据处理逻辑[^1]。结合 Spring 框架和 MyBatis 等技术栈,可以实现高效的数据保存或更新操作[^2]。 #### 数据提交的基本流程 FineReport 的填报功能允许用户将填写的数据提交到数据库中。为了实现自定义提交,需要对提交的数据进行拦截并处理。以下是实现自定义提交的核心步骤: 1. **绑定字段与数据库** 在设计报表,确保填报单元格已经正确绑定到数据库表字段上。这一步是基础配置,保证提交的数据能够映射到正确的字段[^1]。 2. **自定义提交逻辑** 通过 FineReport 提供的接口 `fr.report.engine.FillReport` 或者 `fr.report.engine.CustomFillHandler`,可以捕获填报数据并对其进行自定义处理。例如,可以在提交前对数据进行校验、转换或加密等操作。 3. **数据批量处理** 使用类似 MyBatis 的批量插入方法,可以显著提升性能。参考以下代码示例,展示如何通过 MyBatis 批量插入数据: ```java public class CustomDataHandler extends SqlMapClientDaoSupport { public void insertFromReport(String statementName, List<Map<String, Object>> list) throws Exception { SqlMapClient sqlMapClient = getSqlMapClient(); sqlMapClient.startBatch(); // 开启批处理模式 for (Map<String, Object> entity : list) { sqlMapClient.insert(statementName, entity); // 插入单条记录 } sqlMapClient.executeBatch(); // 提交批处理 } } ``` 上述代码中,`insertFromReport` 方法通过 MyBatis 的批处理机制,将所有提交的数据一次性写入数据库,避免了多次连接数据库带来的性能开销[^2]。 4. **数据校验** 在提交数据之前,可以通过前端或后端实现数据校验。如果校验失败,则返回错误信息给用户,并终止提交操作。例如,在后端实现校验逻辑,可以使用以下代码片段: ```java public boolean validateData(List<Map<String, Object>> dataList) { for (Map<String, Object> data : dataList) { if (!isValid(data)) { // 自定义校验逻辑 return false; } } return true; } private boolean isValid(Map<String, Object> data) { // 校验规则,例如非空检查、格式检查等 return data.containsKey("requiredField") && !data.get("requiredField").toString().isEmpty(); } ``` 5. **Spring 集成** 如果项目基于 Spring 框架,需要在 `spring.xml` 文件中定义相关 Bean,确保自定义类能够被容器管理。例如: ```xml <bean id="customDataHandler" class="com.example.CustomDataHandler"> <property name="sqlMapClient" ref="sqlMapClient" /> </bean> ``` 通过以上配置,可以将自定义数据处理器注入到 Spring 容器中[^2]。 #### 注意事项 - 确保提交的数据经过严格的校验,避免非法数据进入数据库。 - 批量提交,注意数据库连接池的配置,防止因连接不足导致性能问题。 - 如果数据量较大,建议分批提交,以降低内存占用和网络延迟。 ### 示例代码总结 以下是一个完整的自定义提交流程示例: ```java public class FillReportHandler { private CustomDataHandler customDataHandler; public void handleSubmission(List<Map<String, Object>> dataList) throws Exception { if (!validateData(dataList)) { throw new RuntimeException("数据校验失败,请检查输入内容"); } customDataHandler.insertFromReport("insertStatement", dataList); } private boolean validateData(List<Map<String, Object>> dataList) { for (Map<String, Object> data : dataList) { if (!isValid(data)) { return false; } } return true; } private boolean isValid(Map<String, Object> data) { return data.containsKey("requiredField") && !data.get("requiredField").toString().isEmpty(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值