jboss seam Qury组件实践:日期搜索及理解


///2015-1-1 Update \\\\\\\\\\\\\\\\\\\\\\\\\\\\\

1、在下述页面里修改了一个错误,rich:calendar 传递的也是string类型,还有就是在get请求中应该传递的都是基本数据类型。post请求是可以传递对象的。

2、是近期又对query组件有了点理解,在seam中query组件的写法中每个类都要new一个相应的对象,不为别的是为了构造EJBQL的时候使用。如果因为外键的原因使用了别的对象在get方法里应该判断如果null的话也应该new一个,仅仅就是为了构造查询语句。听不明白?!就是这个意思:

假设该query组件叫DemoQuery.java

应该有private Demo demo = new Demo();

还有一个必须有的方法是getDemo()

一般的写法是:

public Demo getDemo() {

return demo;

}

如果他关联的对象是Department.java的话,而且在查询的时候会用到,如果不带变第二个方法的写法就会报“can't convert ... id ”的错误!

应该这么写:

public Demo getDemo() {

if(demo.getDepartment()== null) {

demo.setDepartment(new Department());

}

return demo;

}


3、再有一个理解就是query组件里的另一个api方法 public String getEjbql()

这个方法使用的话就是重写(Overri){注意是重写,不是重载Overload}

根据实际情况重写这个方法,我也不是根明白呢,现在。大体来说就是可以不执行RESTRICTIONS数组的条件,直接执行你这里面定义的条件,然后不满足尼条件的话就该怎么玩就怎么玩。




一直没有实际动手做过seam中搜索相关的东西,最近实现了项目中根据时间搜索的一个功能,期间遇到了问题和疑惑以下做点记录,时间紧,简单记录。

-------------------------------------------------------------------------------------------------------------------

建议在学习搜索的时候参照jboss seam 的官方API:docs.jboss.org/seam/2.2.0.CR1/api/,和之前学长总结的query组件的邮件列表。

++++++++++正文+++++++++++++++++++++

(核心问题出在转换器上,下述)

1、首先是页面的写法,日历的输入使用的是rich:calendar 标签,这个标签传递的是String数据类型,然而我已开始在后台使用的是String接受的会出错是因为在数据库中保存的是date类型而且在实体中定义的也是实体类型,在服务器保存不能match。rich:calendar标签也可以定制,这里是他的官方使用演示网站:richfaces.jboss.org

  另外还可以使用bootstrap的datetimepicker插件,是一个很好的前端解决方案。


2、然后就是配置文件:页面.page.xml     facesconfig.xml 

在页面.page.xml 中定义使用的那个转换器,然后将值传递到后端的那个类的变量里,like this follow:

<param name="beginTime" value="#{messagessList.timeBegin}"
		converterId="me.lostandfound.util.searchDateConverterBegin" />

then , alter the faces-config.xml to declare the convertor and converterId .like This:

<converter>
		<converter-id>me.lostandfound.util.searchDateConverterBegin</converter-id>
		<converter-class>me.lostandfound.util.SearchDateConverterBegin</converter-class>
	</converter>


3、 最后就是后台代码的书写了,包括:实体List.java   和你在faces-config.xml中第一的转换器。

(1)首先定义要接受页面值的变量,Date类型的,然后在RESTRICTIONS数组里构造上where条件语句(这里就不详解query组件的使用了,看文档!)使用实体的字段加上条件后面是EL表达式的你获取的值。

(2)这是转换器:

public class SearchDateConverterBegin implements Converter {

	static Log log = Logging.getLog(SearchDateConverterBegin.class);
	static SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

	public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
		System.out
				.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
						+ toString() + "日期end" + arg2);
		try {
			Date start = df1.parse(arg2);
			Calendar c = Calendar.getInstance();
			c.setTime(start);
			c.add(java.util.Calendar.HOUR_OF_DAY, 0);
			c.add(Calendar.MINUTE, 0);
			c.add(Calendar.SECOND, 0);
			return c.getTime();
		} catch (ParseException e) {
			log.warn("Impossible to convert : " + arg2);
			return null;
		}
	}

	public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
		try {
			return df1.format(arg2);
		} catch (IllegalArgumentException e) {
			log.warn("Impossible to convert : " + arg2.toString());
			return null;
		}
	}
}

<<<<<<<<<<<

如上,搜索是个很重要的功能,框架带来的效率也带来了额外的学习曲线和制约,要灵活的变通。

对于seam的搜索对于seam框架我深知深知深知还有一些东西没有涉及没有搞懂,我想会慢慢进步的。

stay hungry,stay foolish。

keep moving !






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值