2011年9月27日青岛唐岛湾外拍
入了单反必然要好好把玩下,发几张景物的照片,望大家指点。
早就打算入手部相机,起初纠结于卡片与长焦机型,后来觉得长焦的价格跟入门级别的单反也差不多了,然后又开始纠结长焦与单反,看了n多评测,说长焦就是加了长焦镜头的DC,说长焦的长焦端很少能有机会用的上,想了想,确实如此,终于决定下来入单反,可是入谁家的单反呢,Canon?Nikon?Sony?Pentex? 其实这个问题我本来是不纠结的,因为我混的圈子里貌似没有几个人玩单反,所以镜头的事情可以不予考虑,但是呢,我纠结于三款相机型号,Canon 550D,Nikon D3100,Nikon D5100,Canon的这款像素高,但是CMOS的面积比Nikon的3100都小,但是呢,他有第三方的固件能提升不少性能,而且副厂的电池与手柄都很便宜,机身带马达,而尼康的入门机型呢,CMOS尺寸好,相机较Canon的入门机要大一些,手感好,而且我之前玩过Nikon的D60,对尼康家的操作比较熟悉……纠结之下,看了一篇国外的评测报告(国内的评测大部分都含有商业利益,可信度不高)D5100的机身性能与之前的神机D90不相上下,于是乎,心中的天平倾向于D5100,后来,某网站正好搞活动,D5100一下降到4300,正好到达我能接受的心里价位——果断入手!
拿到手把玩了下,确实单反的成像质量要比卡片机好不少,这个好不单单体现在“拍出清晰的图片”,而更多的是表现出了一种“意”,将所看到的东西真实的记录,而且单反的手动性能确实很赞,很值得一玩!最后上张样张吧,使用P档拍摄,仅仅调整大小,未作任何后期,这样应该能直接看到EXIF信息。
今天使用Hibernate查询某个实体时出现标题中所示的错误,百思不得其解,查阅资料后发现,这个问题是因为Hibernate的版本问题造成的,具体原因见这里。
在我的项目中,两个实体类AppUser与AppRole,AppUser类中有一个List<AppRole>d的属性用来存放此用户的角色。我现在想要做的是通过AppRole的rname查询出这个权限下所有的AppRole。我定义了命名查询:
<query name="UserDao.findByRoleName">
<![CDATA[
select u
from com.kaisir.tms.pojo.AppUser as u
where u.AppRoles.rname=:rname
]]>
</query>可是查询出现了标题中的错误,查阅资料,后期版本的Hibernate必须“显式”的指定子查询,不会再自动的添加隐含的查询了,故将定义修改如下:
<query name="UserDao.findByRoleName">
<![CDATA[
select u
from com.kaisir.tms.pojo.AppUser as u inner join fetch u.appRoles r
where r.rname=:rname
]]>
</query>这样我显式的告诉Hibernate先去查询AppUser中的appRoles属性,然后再从属性中查询其rname为指定值的AppUser对象,这样问题就解决了 :)
说实话Kaisir我很头疼于UI的设计与制作,弄个表单还弄得很丑,昨天网上找了找,嘿 您别说,还真让我找到一个表单美化的插件。
这个插件名叫“niceforms”可以对现存的表单进行美化(当然需要引入CSS与JS)上几张图给大家看看效果:)
怎么样,很漂亮吧,今天还看到“温柔”童鞋写的几篇关于text及input file美化的日志,这下,嘿嘿 有了这个就省事咯 :)
嘿嘿 点此下载 此款插件
我这回做的综合设计由于前台部分使用了“Jquery UI”所以少不了通过Ajax与后台进行交互的部分,对于只擅长后台代码编写的我来说,确实是一种挑战。
查了下资料,发现JQuery提交表单并不是什么难事,只需要通过$.ajax()方法就可以,下面给出一个例子,使用POST的方法将用户名密码提交给Login.action:
$.ajax({
type:"POST",
url:"Login.action",
data:{username:$username.val(),password:$password.val()},
dataType:'json',
success:function(data){
if(data.status=='SUCCESS'){
/*登录成功进行跳转*/
location.href='index.jsp';
}else{
/*登录失败操作*/
}
}
});在上面的代码中,我们使用type指定了提交表单的方式,使用url指定了后台处理表单的页面,使用data来附加需要提交的参数,使用dataType指定了返回值的格式,而success则表明如果提交成功(请注意这里仅仅是提交成功,也就是说服务器返回Code200而已)则执行的代码,在这里我们写了一个方法,其中data是服务器返回来的JSON对象。
有了JSON对象,我们如果需要取出其中的某些值,也仅仅需要使用“点分号”来取出需要的值。例如“data.status”即可取出status字段的值。
而在后台构建JSON对象也确实是一件很有意思的事情,这里由于我的菜单只有两处,故仅仅使用了两个类来分别表明其所处的位置。类关系图如下所示。这样,我们仅需要创建一个ParentMenu的ArrayList,并将这个List进行JSON序列化,便可以得到两层的菜单结构 :)
之前对JavaScript以及JQuery这些东西都有畏惧之心,这不现在硬着头皮啃了啃,原来也并不是多难的东西,嘿嘿,别人是会什么用什么,Kaisir我是用什么会什么!!哈!
最近在忙着做“课程综合设计”,我准备做一套基于工作流的毕业论文管理系统,考察了多家OpenSource的WorkFlow产品,最终选择了JBPM来做这次项目的工作流部分的支持,虽然最新版5.1.0已经发布,但是可以找到的资料真的太少太少了,综合设计时间也只有区区5周,没办法去研究新发布的版本了。
当然,为了更好的练手以及更贴近真实的项目,AOP与IOC这些热门技术是必不可少了,这一块的热点非Spring莫属,于是就面临了这样一个问题JBPM与Spring的整合。
查了很多资料,发现JBPM 3.xx版的时候还需要引入一个jar包来支持Spring的整合,而到了4.4这一版,对Spring的整合已经集成了进去,整合也变得异常简单,只需要以下三步:
Step1.将JBPM4.4部署包中install\src\cfg\hibernate\jdbc目录下的mysql.hibernate.cfg.xml拷贝到项目src目录。
Step2.将JBPM4.4部署包中install\src\cfg\spring目录下的applicationContext.xml拷贝到项目src目录。
Step3.将JBPM4.4部署包中install\src\cfg\jbpm目录下的spring.jbpm.cfg.xml拷贝到项目src目录,并重命名为jbpm.cfg.xml
Step4.修改applicationContext.xml与mysql.hibernate.cfg.xml文件中数据库连接字符串,至此,JBPM与Spring的整合完成。
几点注意:
1)上面的几个Step中的文件可以放在classpath能取到的任意位置,注意修改文件路径。
2)jbpm.cfg.xml若不放在src下,需要修改文件位置时,可以通过修改applicationContext文件中的sessionFactory下的property属性:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:com/kaisir/tms/config/hibernate.cfg.xml" />
<property name="dataSource" ref="dataSource" />
</bean>如果你做了一个站,使用的都是标准的写法,但是在IE与火狐下显示就是不一致,怎么找都查不出原因,在这种情况下,你最好检查下有没有写入标准的声明,例如“<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”> <html xmlns=”http://www.w3.org/1999/xhtml”>” 这个东西如果不写的话,连div居中这样的东西在IE9下面都不能正常解析的。
当你在Java中使用中文的时候,一个不小心没注意到编码中文就会变成乱码,有些时候,哪怕你所有的页面都设置了UTF-8编码,也经常莫名其妙的变成乱码,乱码真的很令人头疼啊,我在数据库课程设计跟这学期的综合设计中都遇到了这种莫名其妙的乱码问题,经查阅资料,查询了各种解决方法,还就是属这种“过滤器”的方法好用。我们在”web.xml”中配置加载过滤器——嘿 all Done!
package com.kaisir.util.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class EncodingFilter implements Filter{
private String charset;
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub
arg0.setCharacterEncoding(this.charset);
arg1.setCharacterEncoding(this.charset);
arg2.doFilter(arg0, arg1);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
System.out.println("编码过滤器已加载!");
this.charset=arg0.getInitParameter("charset");
System.out.println("当前编码:"+this.charset);
}
}之后我们在”web.xml”中配置过滤器,代码如下:
<filter>
<filter-name>encoding</filter-name>
<filter-class>
com.kaisir.util.filter.EncodingFilter
</filter-class>
<init-param>
<param-name>charset</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>嘿嘿 :)