[jeeplus] 使用笔记 (gridSelect、datetimepicker etc.) 问题汇总

本贴最后更新于 1303 天前,其中的信息可能已经时移俗易

1. grid 问题

1.创建表单时,grid 选择框中给对应的字段做设置

image.png

image.png

2.生成代码后的 jsp 页面中查看检查。

image.png

image.png

3.最终展示:

image.png

image.png


2. gridselect 多选单选问题:

image.png
补充:表单生成中设置
image.png


3. 为已有模块添加带有 gridSelect 的字段

Recognize when is the app first launched WP8 | 易学教程

下面是以配置清单列表中的增、改表单中的后,加上去的 gridSelect 选择框为例,简单说一下加的流程。

1530189580262311.png

//示例代码片段  
<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>

具体属性解释
1530189580560208.png

下面试大致过一下框架对这个标签的执行流程,具体的需要自己去看和理解,我粗略的注释一下

<sys:gridselect 这里使用的jsp的自定义标签,这个标签在jeeplus的如下目录中。

sys 自定义标签的位置如下
1530189580660154.png

这里要看的是 gridselect.tag 标签的执行流程。

  1. 解析 tag 自定义标签
    1530189581933856.png
  2. 跳转自定义标签后台,它跳到了 modules/common/gridselect 页面

1530189581857992.png

  1. gridselect.jsp 页面

1530189581131720.png

  1. 它自定义标签的执行过程看懂了就很容易理解各个属性的含义是做什么,有什么不懂可以再相互讨论

4. 主附表的页面中的如果某个字段用了字典

QQ 图片 20190514154645.png

主附表的页面中的如果某个字段用了字典,那么页面上该怎么显示该字段呢。
自动生成的页面的 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}},这样,页面中主附表的附表内该字段就会正常显示了。


5. gridselect 中的 input 值回填问题

QQ 图片 20190514154920.jpg

QQ 图片 20190514154932.png

QQ 图片 20190514154937.png

这个 gridselect 选择框怎么选择一个确认后,总是不能回填到 input 显示出来呢,但是值确实拿到了且能传给后端保存,完了还能在列表处显示出来。
问下是我这个 tag 里 labelName 和 labelValue 或者啥的没配置对吗?
还是因为这个标签不支持 :obga.obgb.obgc.nam 这种呢

解决方法
2019-5-16 15:11:27
日期时间控件问题:
在 form.jsp 页面中仅粘贴时间控件的 HTML 代码是不能够起作用的,可能还需要引入相关 js
eg:
image.png


6. gridselect 显示某个嵌套多层的对象

某个 form.jsp 页面中需要用 gridselect 显示某个嵌套多层的一个对象的属性,在 JSP 中该字段的 gridselect 标签内的 lablename 中写 useraccount.user.nam(不带元对象),此时当确定选择后,被选择的记录的该字段应该要显示到此处 input 内,
image.png

但是,前提是 gridselect 组件打开的 form 中的数据记录里必须包含该字段的值对应的 mapper 映射文件中查询 userAccountLogColumns 对应中应该包含该字段,且 userAccountLogJoins 中配置好关联表关系,
image.png

这样就可以在 list 页面和 form 页面中正常显示,正常选择确认字段了。


7. 左树右表中点击左树不传 id 的问题

【传说】Peter 16:47:29
左树右表中,点击左树中的某行,应该查询的 data?
xxxxx.id= 这个里面怎么给不了 id 呢
QQ 图片 20190522170407.png

在哪里配置
【传说】Peter 16:51:06
点击某行的 js 方法在哪里?
【传说】Peter 17:03:00
f...,找到问题了,生成的 xxxTreeList.js 中有处问题。
QQ 图片 20190522170411.png


8. 列表、form 的 JSP 页面中的时间格式问题:

QQ 图片 20190523175048.png

a: 没改啥地方啊,为啥这个字段显示成时间戳了奇了怪了!
b: 你没格式化,js,类,数据库,都看一下

QQ 图片 20190523175045.png

找到问题了,是我实体类中没加这个 @JsonFormat(pattern='yyyy-MM-dd HH:mm:ss') 格式化时间的注解。这个字段应该生成的时候是 String,手动改为 Date 类型的


9. 配置 gridSelect 字段时需要注意以下地方配置

配置 gridSelect 字段时需要注意以下地方配置:
QQ 截图 20190524111611.png

QQ 截图 20190524111544.png


10. 时间格式处理:

默认使用时间格式字段时,list.jsp、form.jsp 页面中该字段时间格式都设置为:format: "YYYY-MM-DD HH:mm:ss"
若只需要年份,暂时采用的办法是将实体类中该字段类型设置为 String,数据库(MySQL)中该字段类型设置为 varchar 后,
在 list.jsp 中引用的 js 代码中image.png

此处设置为 format: "YYYY"
form.jsp 中同样处理方法:
image.png

设置完成后,则会显示为:
image.png


11. 列表页中因为实体类关联属性长度导致查询异常问题

QQ 图片 20190524182606.png

QQ 图片 20190524182602.png

Java 中关联属性写的太长了!😂
想知道最长可以写多少?


12. SQL 中 left join 查询问题

SQL 之 left join 后有多个条件时应该怎么写才能正确的显示出想要的结果呢?

image.png

LEFT JOIN m_rank majorrank ON (majorrank.majorid = emcode.levelformajorsid AND majorrank.universityid = emcode.universityid)


13. 某个使用了 gridselect 的多层嵌套对象的字段的设置问题

微信截图 20190529155230.png

答案:gridselect 给该字段传的值是 gridselect 查询出来的对象的 id,回显时回显的是同样的对象的同一个属性字段。图片中此处该字段的对象类型和 gridselect 查询出来的对象不是同一个类型,会出现回显时显示的是 gridselect 对象的同属性名的属性字段值。暂解决办法为:更换 gridselect 选择器中的对象与该字段对象相同,暂未找到 2 者不同类时的解决办法(不重要)。


14. 怎么让主附表中的附表也打开横向滚动条?

QQ 图片 20190529175245.png

用 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>

15. gridselect 回填信息显示问题

image.png

回填信息显示问题:
原因可能是 XML 中对应字段配置不正确时,则会导致 gridselect 选择某条记录确认后,但是数据不能回填到文本框中。
解决办法:

  1. 保证 labelname 和 labelValue 中的值正确;
  2. 保证 XML 中查询关联字段对应的 gridselect 相对应的正确。
  3. 另外,发现此处的回显只能显示 一个对象中的直接字段的值,不能显示 一个对象中的对象中的字段的值。

16. SQLException: Connection is read-only.

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);
    }

17. 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>

这个是字典多选。
这个是查询数据库的
QQ 图片 20190626151006.png

要在多选框中搜索的话 可以使用 select2 插件。

参考:Basic usage | Select2 - The jQuery replacement for select boxes


18. 从数据库导入项目中的表然后生成的模块后,这模块的 list.jsp 页面会报错:

QQ 图片 20190626151247.png

QQ 图片 20190626151252.png

解决办法:手动在 方法中为 Model 添加一个 对象。

QQ 图片 20190626151424.png


19. 慎用 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>

20. 关联查询 WHERE 语句中使用 AND 且关系过滤会极大降低查询效率

关联查询中如果使用了 如下注释中的关联,则会造成查询花费时间很长。 1.38s --> 0.014s

LEFT JOIN m_rank majorrank ON majorrank.id = a.majorrankid
-- (
-- 	majorrank.majorid = emcode.levelformajorsid
-- 	AND majorrank.universityid = emcode.universityid
-- )

21. jstree 中怎么设置展开的层级?


22. Jeeplus 的树形结构表,在 List.jsp 展示中的问题

Jeeplus 的树形结构表,在 List.jsp 展示中的问题:某个字段使用字典后,需要在 js 中进行转化。

eg:可以参考 area.js
image.png

image.png

<details class="details action__item commentMenuBtn">
                            <summary>
                                <svg class="svg--small">
                                    <use xlink:href="#iconChat"></use>
                                </svg>
                            </summary>           
</details>

gridselect 选择器中,展示的某个字段如果使用了字典,该如何显示?还是直接先将获取的 data 的数据中该字段使用字典工具的方法赋值之后再返回给页面?


原贴地址[jeeplus] 使用笔记 (gridSelect、datetimepicker etc.)

  • 博文整理
    2 引用 • 20 回帖
  • 笔记

    好记性不如烂笔头。

    303 引用 • 777 回帖
  • 程序员

    程序员是从事程序开发、程序维护的专业人员。

    532 引用 • 3528 回帖
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3168 引用 • 8207 回帖
2 操作
PeterChu 在 2020-09-28 19:07:40 更新了该帖
PeterChu 在 2020-09-28 18:56:17 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...