display tag中去除不需要的参数

本文介绍了一个MIS系统开发项目中使用DisplayTag生成表格的经验。重点讲述了如何配置DisplayTag仅用于显示数据和生成页码栏,同时自定义实现分页功能的方法。此外,还讨论了如何排除不必要的URL参数。
        我在一个MIS系统开发项目组,是一个带项目经理在内只有4个人的小组。我们使用display tag来生成表格。 displaytag功能比较完善,它具有分页和页码栏的功能。我们没有使用它的分页功能,因为这种分页不是在数据库查询层面的,所以数据库没有减轻丝毫的负担。
       所以我们只让displaytag为我们显示数据和生成页码栏,而由我们自己编码来处理数据的分页。以下就是displaytag的属性设置。

<display:table id="question"
                          name="questionPage.list"
                          class="its"
                          size="questionPage.count"
                          partialList="true" pagesize="questionPage.pageSize"
                          requestURI="/question/questionQueryAction.do?method=query">    

 partialList这个属性就是告诉displaytag不使用它的分页功能。      

        页码栏页号参数都由displaytag生成,为了获取这个页号,必须知道它的参数名,这是displaytag根据id属性生成的,要得到它必须使用displaytag库中的API。以下是一个可以根据id来获得参数名的函数。

    protected String getPageParamName(String id){
        return  new  org.displaytag.util.ParamEncoder(id).
                              encodeParameterName(org.displaytag.tags.TableTagParameters.PARAMETER_PAGE);
    }

        有了参数名,就可以通过request.getparameter来获得页码了,之后的分页查询就可以做了。

        使用displaytag的页码,也有其局限性。你必须保证页码参数必须以parameter的形式存在于request中。所以如果你想改变页码的话,对页码的控制逻辑一定要在IE里用JS来做,一旦到了server端,就无法改变了,因为parameter是不能改变的。

       在表格中会有一些翻页的链接,这些连接会由displaytag自动生成,除了页码等参数外,还会把所有request中的parameter统统加入到URL中去。所以看到的URL会是这样的。

http://localhost:8080/question/questionQueryAction.do?keyword=&beginDate=2006-08-21
&products=&sort1=all&endDate=2006-08-23&d-4031840-p=2
&business=all&method=query&method=query&keywordType=V1

        其中只有d-4031840-p=2是displaytag自己的,它是传递页码的参数。其它都是request中的参数,有些是查询参数,有些是和dispatchaction有关的参数。这样很有好处,特别是在做查询页面的时候,这些参数都是很有用的。
       但是,如果遇到不需要的参数,也将不可避免的被加进去,通常是无害的,但有时是会致命的。有一次,我用表单上传一段文字,结果也被加到了URL里面,这编文章很长,而且是有HTML格式的,这最终导致链接无法使用。为了去掉这些没用的参数,可以使用displaytag的一个属性。如下:

excludedParams="id baseCode baseCode1 baseCode2 itemCode subDate aboutUser aboutProduct subjectTitle subjectContent"

        把不要的参数统统列出来,用空格搁开就可以了。

        总之,displaytag功能比较完善,但是也有一些局限——毕竟不是你自己编的代码嘛!——有时需要一些额外的工作,才能让它很好的为你工作。




private void createSecureDisplayContent(int displayId) { DisplayManager dm = (DisplayManager) getSystemService(Context.DISPLAY_SERVICE); Display display = dm.getDisplay(displayId); if (display == null || !display.isValid()) { Log.e(TAG, "Invalid display: " + displayId); return; } try { Context displayContext = createDisplayContext(display); WindowManager wm = (WindowManager) displayContext.getSystemService(Context.WINDOW_SERVICE); View view = new View(displayContext); view.setBackgroundColor(Color.BLACK); // 设置布局参数 WindowManager.LayoutParams params = new WindowManager.LayoutParams( WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT, // 关键:使用比应用更低的层级 1010,//WindowManager.LayoutParams.TYPE_DISPLAY_OVERLAY // 关键:FLAG_SECURE 允许在安全屏显示,但响应输入 WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_SECURE | WindowManager.LayoutParams.FLAG_SCALED, // 可选 PixelFormat.RGBA_8888 ); // 可选:设置窗口标题(调试用) params.setTitle("InstrumentBackground_" + displayId); // ✅ 5. 使用目标屏幕的 WindowManager 添加视图 wm.addView(view, params); Log.i(TAG, "成功在屏幕 (ID=" + displayId + ") 添加黑屏"); } catch (Exception e) { Log.e(TAG, "无法在 SECURE 屏幕添加视图", e); } }
08-07
==> Preparing: WITH v_item_tag_info(item_tag_code, employee_number) AS ( VALUES (?, ?) ) SELECT T01.item_tag_code AS item_tag_code ,T01.employee_number AS employee_number ,T01.item_tag_name AS item_tag_name ,T01.item_tag_type AS item_tag_type ,T01.item_tag_priority_display_flag AS item_tag_priority_display_flag ,T01.long_term_preservation_flag AS long_term_preservation_flag ,T01.order_display_start_date AS order_display_start_date ,'0' AS list_create_flag ,T02.new_arrival_flag AS new_arrival_flag ,CASE WHEN '2024-01-16' BETWEEN T01.order_display_start_date AND T01.order_display_end_date THEN '1' WHEN '2024-01-16' < T01.order_display_start_date THEN '2' ELSE '3' END AS sort_key FROM m_item_tag T01 -- 商品タグマスタ LEFT OUTER JOIN m_item_tag_details_per_person T02 ON T02.original_store_code = '123456' AND T01.item_tag_code = T02.item_tag_code AND T01.employee_number = T02.employee_number INNER JOIN v_item_tag_info T03 --商品タグ検索条件マスタ ON T01.item_tag_code = T03.item_tag_code AND T01.employee_number = T03.employee_number WHERE T01.original_store_code = '123456' ORDER BY sort_key ASC, T02.new_arrival_flag DESC, T01.item_tag_priority_display_flag DESC, T01.order_display_start_date DESC, T01.item_tag_input_datetime DESC, T01.item_tag_type ASC, T01.item_tag_code ASC ==> Parameters: 1234(String), 123(String) <== Total: 0 我的数据:"original_store_code","item_tag_code","employee_number","item_tag_type","item_tag_name","item_tag_usage","alert_send_date","order_display_start_date","order_display_end_date","automatic_generation_type","automatic_generation_key","item_tag_priority_display_flag","long_term_preservation_flag","apply_flag","out_of_date_alert_flag","item_tag_input_datetime","item_tag_input_person","item_tag_input_name","item_tag_input_person_type","item_tag_update_datetime","update_datetime","update_function_id","update_person_id","update_count" "123456",1234","123","04","商品タグ名称01","use1",2025-01-01,2025-01-02,2025-01-01,"0 ","0","1","0","0","0",2025-01-03 0:00:00,"0 "," ","0 ",2025-01-01 0:00:00,2025-01-01 0:00:00,"0","0",0 "082600","02 ","1234567890102","01","商品タグ名称02","use2",2025-01-01,2025-01-04,2025-01-01,"0 ","0","0","0","0","0",2025-01-05 0:00:00,"0 "," ","0 ",2025-01-01 0:00:00,2025-01-01 0:00:00,"0","0",0
最新发布
10-16
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值