///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" />
<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 !