[jeeplus] 使用笔记 (gridSelect、datetimepicker etc.)
相关帖子
-
-
-
PeterChu •作者
Recognize when is the app first launched WP8 | 易学教程
下面是以配置清单列表中的增、改表单中的后期加上去的 gridSelect 选择框为例,简单说一下加的流程。
//示例代码片段 <sys:gridselect id="proManage" //对象名(可以随便取) url="${ctx}/pro/proManage/data" //gridselect选择框请求数据的url name="proManage.id" //gridselect弹出框选择数据后将 对象名.属性(java属性)的值,替换掉from表单中隐藏input框中的要提交的关联属性(我这里是项目id) value="${proManage.id}" //回显隐藏from表单input中的要提交的关联属性值 labelName="proManage.name" //选择gridselect框中的数据后,会将该 对象名.属性(Java属性) 的值在form表单中的显示的input框中回显 labelValue="${proManage.name}" //打开窗口后回显该 对象名.属性名到form表单中 title="选择项目" //弹出框的title cssClass="form-control required" //样式 fieldLabels="项目编号|项目名称" //gridselect框中表格的列名称 fieldKeys="proCd|name" //gridselect框中表格对应的列要显示的那个字段的值(java属性) searchLabels="项目编号|项目名称" //gridselect框中查询框前的文本值 searchKeys="proCd|name" > //gridselect框中根据该字段查询数据(查询规则在 代码生成器的表单规则内设置的是保持一致的) </sys:gridselect>
具体属性解释
下面试大致过一下框架对这个标签的执行流程,具体的需要自己去看和理解,我粗略的注释一下
<sys:gridselect 这里使用的jsp的自定义标签,这个标签在jeeplus的如下目录中。
sys 自定义标签的位置如下
这里要看的是
gridselect.tag
标签的执行流程。1.解析 tag 自定义标签
2.跳转自定义标签后台,它跳到了 modules/common/gridselect 页面
3.gridselect.jsp 页面
4.它自定义标签的执行过程看懂了就很容易理解各个属性的含义是做什么,有什么不懂可以再相互讨论
-
PeterChu •作者
主附表的页面中的如果某个字段用了字典,那么页面上该怎么显示该字段呢。
自动生成的页面的 Js 代码这块直接是{{dict.name}}
,dict 没见到哪里定义、或者调用了字典,数据库中当然存的是字典的 value,而不是 name ;
我之前的解决办法都是,存储的时候,直接存字典的 name 到数据库表中,这里显示的时候,就用{row.name}
,怎么用其他方法呢
2019-6-13 15:50:51
找到解决办法:原因:js 中未对使用了字典的字段做处理。在 2.41 新版本中发现此处 js 中有处理方法。
function detailFormatter(index, row) { var htmltpl = $("#volunteerChildrenTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,""); var html = Mustache.render(htmltpl, { idx:row.id }); $.get("${ctx}/volunteer/volunteerconfig/volunteer/detail?id="+row.id, function(volunteer){ var volunteerChild1RowIdx = 0, volunteerChild1Tpl = $("#volunteerChild1Tpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,""); var data1 = volunteer.volunteerConfigList; for (var i=0; i<data1.length; i++){ data1[i].dict = {}; data1[i].dict.name = jp.getDictLabel(${fns:toJson(fns:getDictList('school_batches'))}, data1[i].name, "-"); addRow('#volunteerChild-'+row.id+'-1-List', volunteerChild1RowIdx, volunteerChild1Tpl, data1[i]); volunteerChild1RowIdx = volunteerChild1RowIdx + 1; } }) return html; }
这样之后,下面
<script type="text/template" id="volunteerChild1Tpl"> <tr> <td> {{row.dict.name}} </td> <td> {{row.vindex}} </td> <td> {{row.isArt}} </td> <td> {{row.isAdvance}} </td> <td> {{row.reportedStart}} </td> <td> {{row.reportedEnd}} </td> <td> {{row.raiseStart}} </td> <td> {{row.raiseEnd}} </td> <td> {{row.enrollStart}} </td> <td> {{row.enrollEnd}} </td> </tr> </script>
中就可以直接使用
{{row.dict.name}}
,这样,页面中主附表的附表内该字段就会正常显示了。1 操作PeterChu 在 2019-06-13 15:55:15 更新了该回帖 -
-
-
PeterChu •作者
某个 form.jsp 页面中需要用 gridselect 显示某个嵌套多层的一个对象的属性,在 jsp 中该字段的 gridselect 标签内的 lablename 中写
useraccount.user.name
(不带元对象),此时当确定选择后,被选择的记录的该字段应该要显示到此处 input 内,
但是,前提是gridselect 组件打开的 form 中的数据记录里必须包含该字段的值对应的 mapper 映射文件中查询userAccountLogColumns
对应中应该包含该字段,且userAccountLogJoins
中配置好关联表关系,
这样就可以在 list 页面和 form 页面中正常显示,正常选择确认字段了。
-
-
-
PeterChu •作者
时间格式处理:
默认使用时间格式字段时,list.jsp、form.jsp 页面中该字段时间格式都设置为:format: "YYYY-MM-DD HH:mm:ss"
若只需要年份,暂时采用的办法是将实体类中该字段类型设置为String
,数据库(MySql)中该字段类型设置为varchar
后,
在 list.jsp 中引用的 js 代码中
此处设置为format: "YYYY"
;
form.jsp 中同样处理方法:
设置完成后,则会显示为:
-
-
-
PeterChu •作者
sql 之 left join 后有多个条件时应该怎么写才能正确的显示出想要的结果呢?
LEFT JOIN m_rank majorrank ON (majorrank.majorid = emcode.levelformajorsid AND majorrank.universityid = emcode.universityid)
-
PeterChu •作者
怎么让主附表中的附表也打开横向滚动条?
用 CSS 样式控制显示出来吗?尝试一下<style> .tab-content{ overflow-x: scroll; width: 3000px; } </style>
添加该样式后显示不正确。
暂且在 list.jsp 中添加:<style> .tabs-container .tab-content > .active, .tabs-container .pill-content > .active { display: block; overflow-x: auto; width: 3000px; } </style>
-
-
PeterChu •作者
java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed
解决方法:事务配置在 service 层,但是你的 service 层的方法是 query 开头的,service 调用的 query 方法根本就没有事务。你的配置文件下面是不是还有关于 query*的配置成了 read-only?修改你 service 方法的开头变成不是 read-only 的那种配置,如 clear 开头。(在 query 方法名(read_only)里面执行了 update 操作,所以就报错了。)
//删除转化出现异常时已经插入的数据记录 @Transactional(readOnly = false) public void deleteERecord(LevelForMajors levelForMajors){ mapper.deleteERecord(levelForMajors); }
-
PeterChu •作者
功能需求分析 --> 业务逻辑 --> 数据逻辑 --> 编码逻辑 --> 编码实现 --> 功能实现
参考:
https://blog.csdn.net/bug1169719896/article/details/81662328
业务逻辑和功能需求表
1 操作PeterChu 在 2019-06-11 16:52:07 更新了该回帖 -
PeterChu •作者
MySql 中根据 判断某个字段(字符串)的长度后 按不同情况更新 同一个字段的值 的方法:
UPDATE m_levelformajor SET type = ( CASE WHEN 1 < LENGTH(number) AND LENGTH(number) < 3 THEN "2" WHEN 3 < LENGTH(number) AND LENGTH(number) < 5 THEN "3" WHEN 6 <= LENGTH(number) THEN "4" WHEN number IS NULL THEN "1" ELSE "1" END ) UPDATE m_levelformajor SET type = ( CASE WHEN number IS NULL THEN "1" ELSE "1" END ) SELECT id,name, number, type, parent_id,parent_ids , LENGTH(number) FROM m_levelformajor SELECT id,name, number, type, parent_id,parent_ids , LENGTH(number) FROM m_levelformajor WHERE LENGTH(number) <5 AND LENGTH(number) > 3 SELECT id,name, number, type, parent_id,parent_ids , LENGTH(number) FROM m_levelformajor WHERE 1 < LENGTH(number) AND LENGTH(number) <3 SELECT id,name, number, type, parent_id,parent_ids , LENGTH(number) FROM m_levelformajor WHERE LENGTH(number) <1```
-
PeterChu •作者
根据某列中的值是否包含某个字符串筛选记录:
UPDATE m_levelformajor SET type = ( CASE WHEN 1 < LENGTH(number) AND LENGTH(number) < 3 THEN "22" WHEN 3 < LENGTH(number) AND LENGTH(number) < 5 THEN "23" WHEN 6 <= LENGTH(number) THEN "24" WHEN number IS NULL THEN "21" ELSE "1" END ) WHERE find_in_set('19db900b7129468385d96f96cd6c672a', parent_ids); --设置本科专业记录的 type UPDATE m_levelformajor SET type = ( CASE WHEN 1 < LENGTH(number) AND LENGTH(number) < 3 THEN "12" WHEN 3 < LENGTH(number) AND LENGTH(number) < 5 THEN "13" WHEN 6 <= LENGTH(number) THEN "14" WHEN number IS NULL THEN "11" ELSE "1" END ) WHERE find_in_set('e131fdeaf3f041b086bec4e68dd096c7', parent_ids);```
-
PeterChu •作者
MySql 中的 null
SELECT <include refid="EucodeColumns"/> FROM e_uecode a <include refid="EucodeJoins"/> WHERE a. YEAR = "2018" AND a.wltype = "理科" AND a.schoolbatches = "7" AND (a.r3 != "2" OR ISNULL(a.r3)) AND (a.r3 != "3" OR ISNULL(a.r3))
如果表中某列中的值默认为 null,那么查询时 如果 where 子句中有使用该字段做筛选,那么是不是会自动筛选掉该列值为 null 的记录啊?
处理方式:
筛选条件中增加对 null 的判断处理。
-
PeterChu • • 2 评论作者
问题:jeeplus 中想实现下拉多选功能要怎么实现?
从字典取数据:
<td class="active"><label class="pull-right">类型:</label></td> <td> <form:select path="employee.employeeType" class="form-control"> <form:options items="${fns:getDictList('employee_type')}" itemLabel="label" itemValue="value" htmlEscape="false"/> </form:select> </td>
这个是字典多选。
这个是查询数据库的
要在多选框中搜索的话 可以使用 select2 插件。
-
-
PeterChu •作者
慎用
select *
当自己手写一些 sql 时,如果查找的对象/表中有封装了其他对象,那么,当 sql 中有
select *
时会导致封装对象为 Null 的现象。
因此,如果有会使用到封装的对象,那么 xml 中的 sql 还是加上映射关系吧。
eg:<!-- 根据年份、省份、高校、文理科、批次查找记录 findListByYPNWB --> <select id="findListByYPNWB" resultType="Eucode" > SELECT <include refid="EucodeColumns"/> FROM e_uecode a <include refid="EucodeJoins"/> WHERE a.year = #{year} AND a.province = #{province.id} AND a.universityid = #{university.id} AND a.wltype = #{wltype} AND a.schoolbatches = #{schoolBatches} AND (a.r3 != "2" OR ISNULL(a.r3)) AND (a.r3 != "3" OR ISNULL(a.r3)) </select>
-
-
-
PeterChu •作者
关联查询中如果使用了 如下注释中的关联,则会造成查询花费时间很长。 1.38s --> 0.014s
LEFT JOIN m_rank majorrank ON majorrank.id = a.majorrankid -- ( -- majorrank.majorid = emcode.levelformajorsid -- AND majorrank.universityid = emcode.universityid -- )
-
PeterChu •作者
SSM 中 MyBatis 的某个 xxxMapper.xml 中,是否可以这样写?
<if test="planMajorName != null and planMajorName != '' and r1 = '0'"> AND a.planmajorname = #{planMajorName} </if> <if test="planMajorName != null and planMajorName != '' and (r1 = null or r1 = '')"> AND a.planmajorname LIKE <if test="dbName == 'oracle'">'%'||#{planMajorName}||'%'</if> <if test="dbName == 'mssql'">'%'+#{planMajorName}+'%'</if> <if test="dbName == 'mysql'">concat('%',#{planMajorName},'%')</if> </if>
-
PeterChu •作者
Mysql 这个 Cascade 在更新了主表的关联字段如 user 表中 id 可以更新附表中的关联字段,比如 附表中的 userid 吗?
有没有一种方法,可以只设置 1 个 字段为外键后,其他几个字段作为同步关联字段,比如 主表 user 表中 id, name, age ,sex 将 id 设置为外键关联附表的 userid 后,同时附表中也包含了 username , userage, 能否不再设置其他外键情况下,实现更新主表中的 id,name,同步更新附表中的 userid, username 呢?
还是必须再为 name --> username 做一个外键关联一下? -
-
PeterChu • • 1 评论作者
Mysql 中对一个表中的字段进行汇总计算后 赋值给 其中一个字段
如:招生计划表中,按照年份、省份、批次、文理科、学校 分组汇总后,将各专业招生计划数汇总后,赋值给该校该年度该批次该省份该文理科中的 招生计划总数。
查询语句:
SELECT COUNT(zhaoshengjihua) AS jihuazongshu, zhaoshengjihuazongshu, shengfen, nianfen, wenlike, pici, daxuedaima, daxuemingcheng FROM d_zhaoshengjihuabiao GROUP BY shengfen, nianfen, wenlike, pici, daxuedaima;
*zhaoshengjihuazongshu 字段中已经被赋值了,原来该字段中的值为空最开始写出的 sql 如下,但是完全不正确。
UPDATE d_zhaoshengjihuabiao a SET a.zhaoshengjihuazongshu = ( SELECT COUNT(b.zhaoshengjihua) AS b.cou, b.shengfen, b.nianfen, b.wenlike, b.pici, b.daxuedaima FROM d_zhaoshengjihuabiao b GROUP BY b.shengfen, b.nianfen, b.wenlike, b.pici, b.daxuedaima ) WHERE b.shengfen = a.shengfen AND b.nianfen = a.nianfen AND b.wenlike = a.wenlike AND b.pici = a.pici AND b.daxuedaima = a.daxuedaima
在网上搜索后,看到如下 2 条 sql 做为参考:
-- 1 UPDATE au_window_re_project aw SET aw.project_name = ( SELECT ap.SERVICENAME FROM apas_service ap WHERE ap.unid = aw.PROJECT_ID ) -- 2 UPDATE test_user_points AS a LEFT JOIN ( SELECT user_id, sum(point) AS point_count FROM test_point_log GROUP BY user_id ) AS b ON a.user_id = b.user_id SET a.point_count = b.point_count
最终参考第 2 条 SQL 写出如下语句,可以实现要求:
UPDATE d_zhaoshengjihuabiao AS a LEFT JOIN ( SELECT COUNT(zhaoshengjihua) AS cou, shengfen, nianfen, wenlike, pici, daxuedaima FROM d_zhaoshengjihuabiao GROUP BY shengfen, nianfen, wenlike, pici, daxuedaima ) AS b ON ( a.shengfen = b.shengfen AND a.wenlike = b.wenlike AND a.nianfen = b.nianfen AND a.pici = b.pici AND a.daxuedaima = b.daxuedaima ) SET a.zhaoshengjihuazongshu = b.cou ;
最开始的 SQL 还不知道错在了哪里,应该是用子查询实现的呀PeterChu • -
PeterChu •作者
为 jp 工具添加自定义方法,实现 js 的 unicode 编码
在 jeeplus.js 中的添加方法
(function(){ jp = { /** 实现 unicode 编码 */ toUnicode : function (s) { var str = ""; for (var i = 0; i < s.length; i++) { str +="\\u"+('0000' + s.charCodeAt(i).toString(16)).slice(-4)+""; } return str; }, } })(jQuery);
实现效果:
需要注意的是:
"\u0061\u0062\u0063"
中间需要转义字符:
"\\u0061\\u0062\\u0063"
-
PeterChu •作者
java 中 字符串的 slipt() 方法
- slipt() 方法会在分割完成后,对获取到的数组从末端开始验证是否为"",若 true 则,数组长度 -1 ,直到遇到一个不为"" 的元素。
- 此时,在这个不为 "" 的元素之前的所有其他 "" 元素依旧保留。(未验证数组起始端的 "" 是否验证排除)
- 不知道从 1.5 开始到现在最新版本,该方法是否发生变化。
public static void main(String[] args) { String s = ""; String[] ss = s.split(","); System.out.println(ss.length);//1 System.out.println(Arrays.toString(ss));//[] System.out.println(ss == null);//false System.out.println(ss[0] == null);//false String s1 = "123-123.2-1--"; String[] ss1 = s1.split("-"); System.out.println(ss1.length);//3 System.out.println(Arrays.toString(ss1));//[123, 123.2, 1] String s2 = "123--123.2-1--"; String[] ss2 = s2.split("-"); System.out.println(ss2.length);//4 System.out.println(Arrays.toString(ss2));//[123, , 123.2, 1] }
参考 :
https://blog.csdn.net/qq_27093465/article/details/549103231 操作PeterChu 在 2019-07-23 17:00:37 更新了该回帖 -
-