分类 JAVA 下的文章

playframework2.0控制页面时间显示格式

这两天被play的时间显示搞的欲仙欲死,直接在页面上

@person.addDate

显示出来的时间格式是

Sat Jan 05 08:00:23 CST 2013

显然太坑爹,太不友好了嘛。于是google之,希望找到时间格式转换显示的方法,找不到啊找不到……
后来想起play不是自带几个例子嘛,翻了翻……果然找到了……

<time datetime="@person.addDate">@person.addDate.format("MMM dd yyyy")</time>

坑啊~~只要在页面上需要显示时间的地方这么写就可以转换格式显示了,至于什么格式,那就随便自己定义了……

这个显示出来的就是

一月 05 2013

看来官方文档和例子才是王道啊~~google浪费好多时间,下次记得直接翻官方例子……

playframework2.0的简单配置

这两天试用了下playframework2.0的框架,感觉良好,把简单的配置过程记下来,聊做备忘。
其实play框架的主页上有基本的配置,我就简单的照本宣科,整合一下

1.配置PATH

官方地址:传送门

对于mac来说,修改.bash_profile文件,增加一个定义就可以了

$ nano .bash_profile
增加
# Setting PATH for Play framework
PATH="/Users/eric/study/java/play-2.0.4:${PATH}"
export PATH

后保存(注意换成自己的路径)

这样就可以直接在终端输入“play”来进行相关操作
play1.png



- 阅读剩余部分 -

java将doc文件转换为pdf文件的三种方法

项目要用到doc转pdf的功能,一番google之后总结出了三种方法(免费方案),于是一一试了一下,做个总结记录,下次要用直接查,省的忘了……

方法1.poi读取doc + itext生成pdf (实现最方便,效果最差,跨平台)

方法2.jodconverter + openOffice (一般格式实现效果还行,复杂格式容易有错位,跨平台)

方法3.jacob + msOfficeWord + SaveAsPDFandXPS (完美保持原doc格式,效率最慢,只能在windows环境下进行)

方法1:使用jdoctopdf来实现,这是一个封装好的包,可以把doc转换成pdf,html,xml等格式,调用很方便
地址:http://www.maxstocker.com/jdoctopdf/downloads.php(项目不维护了,官网也没了)
需要自己导入poi包与itext包,需要注意的是itext要导入itext-2.1.5版本,新版本由于包名不同,会出错
也可以自己根据网上的其他教程根据需要自己写方法来实现。
用jdoctopdf的实现方法如下:





- 阅读剩余部分 -

Spring MVC的@SessionAttribute注解小记

最近做spring mvc开发的时候要用到session,于是就想试试通过@SessionAttribute这个注解来实现保存用户登录信息的session,发现在两个control之间没法获取保存的session,纠结的GOOGLE许久后偶然在stackoverflow上发现了下面一段回答:

The  @SessionAttribute annotation 

Session attributes as indicated using this annotation correspond to a specific handler's model attributes, getting transparently stored in a conversational session. Those attributes will be removed once the handler indicates completion of its conversational session. Therefore, use this facility for such conversational attributes which are supposed to bestored in the sessiontemporarily during the course of a specific handler's conversation.

For permanent session attributes, e.g. a user authentication object,use the traditional session.setAttribute method instead. Alternatively, consider using the attribute management capabilities of the generic WebRequest interface.

 

In other words,  @SessionAttribute  is for storing conversation MVC-model objects in the session (as opposed to storing them as request attributes). It's not intended for using with arbitrary session attributes. As you discovered, it only works if the session attribute is always there.

I'm not aware of any other alternative, I think you're stuck with HttpSession.getAttribute()

大概的基本意思就是:  @SessionAttribute这个注解只有当你想在某个特定的事件处理中临时保存session会话(红色标注)的时候才适用,而当需要永久保存session的话,还是采用常规的方法,比如说:session.setAttribute

 

===========常规java操作session的方法===========

- 阅读剩余部分 -

spring mvc 小笔记

常用注解

    @Controller
    在类上面定义,表明该类为控制器,返回字符串与redirect:xxx
    @RequestMapping
    类或方法上面使用此注解,设置URL访问地址。它有两个属性,value指定访问路径,method指定指定请求方式,请求方式在RequestMethod这个类中,全部以常量形式定义,它默认使用GET请求。
    @RequestParam
    指定Request请求参数,在方法参数中定义,相当于传统的request.getParameter()
    @PathVariable
    获取URL访问路径变量,这是Spring MVC 3.0框架才加入的特性,基于RESTful风格的URL访问路径。
    @ModelAttribute
全局式的方法,在一组URL访问路径中,每次都会执行,方法返回结果保存在module会话中。
    @Service
    在类上面定义,指定被注解的类是业务逻辑组件,如果不指定具体的Bean ID,则采用默认命名方式,即类名的首字母小写。

    @Autowired
    IoC自动注入功能,替换以前的set写法,在SSH2中就已经开始使用了。

    @Qualifier
    对同一接口类有不同实现指定具体的实现类。
    @ResponseBody
    同样定义在方法上,Ajax调用声明,指定方法返回结果为Ajax回调函数结果。这是Spring MVC 3.0框架中增加的一个新特性。
    @InitBinder
    初始化数据绑定与类型转换,将传入的参数转换为自定义类型,或者对参数进行自定义处理。

@Controller 声明Action组件
@Service    声明Service组件    @Service("myMovieLister") 
@Repository 声明Dao组件
@Component   泛指组件, 当不好归类时. 
@RequestMapping("/menu")  请求映射
@Resource  用于注入,( j2ee提供的 ) 默认按名称装配,@Resource(name="beanName") 
@Autowired 用于注入,(srping提供的) 默认按类型装配 
@Transactional( rollbackFor={Exception.class}) 事务管理
@ResponseBody
@Scope("prototype")   设定bean的作用域

 

Servlet拦截匹配规则事例

当映射为@RequestMapping(“/user/add”)时:
1、拦截*.do,例如:/user/add.do,弊端:所有的url都要以.do结尾。不会影响访问静态文件。
2、拦截/app/*,例如:/app/user/add,弊端:请求的url都要包含/app,@RequestMapping(“/user/add”)中不须要包含/app。
3、拦截/,例如:/user/add,弊端:对jpg,js,css静态文件的访问也被拦截不能正常显示。
4、拦截/*,可以走到Action中,但转发到jsp时再次被拦截,不能访问到jsp。

转发与重定向

可以通过redirect/forward:url方式转到另一个Action进行连续的处理。

可以通过redirect:url 防止表单重复提交 。

写法如下:

return “forward:/order/add”;

return “redirect:/index.jsp”;

ofbiz目录结构和几个重要文件

===================ofbiz整体结构=====================
applications 目录,包含了OFBIz 核心的应用程序组件,如订单管理,电子商务存储等。
component-load.xml 文件定义了所有在OFBIZ启动时需要加载的应用程序的位置。这里的每一个组件,都是一个基于OFBIZ 构建的Web 应用程序。 所以,创建新的应用程序时,需要在该文件中添加应用程序的位置信息。但是在ofbiz\hot-deploy\目录下的应用程序不需要在component-load.xml里定义,ofbiz启动时会自动加载所有hot-deploy下的内容。

Framework 框架目录,包含OFBIZ 框架的组件,例如实体引擎和服务引擎。这是OFBIZ 框架的基础,它们负责数据访问、缓存、展示窗口、管理事务以及更多应用组件使用的低级任务。

hot-deploy 热部署目录,是另一个目录。它的组件能够被删除和自动载入。这里没有
component-load.xml 这个文件。本目录中所有的组件,都会在framework 和application 目录下的组
件被导入之后导入。
另外这个目录不需要通过component-load.xml来制定加载他们,这个目录下面符合ofbiz规则的都会被加载。

specialpurpose
殊目的的组件通常是没有取得作为OFBiz核心组件的资格。它们仅仅为一部分OFBiz用户服务。既然他们是(或者应该是)可选的,OFBiz可以(或者应该)在没有这些组件时候运行。这些组件在 ${OFBizInstallFolder}\specialpurpose目录中。

runtime
存放日志,web服务器等
===================ofbiz组件结构=====================

- 阅读剩余部分 -

ofbiz中screen的<condition>元素

<condition>元素是<section>的一个子元素。如果该元素的条件计算是真,那么then部分将被执行,否则else将被执行。
如:
<condition> <or> <and> <if-has-permission permission="PROJECTMGR_ADMIN"/> <not><if-has-permission permission="PROJECTMGR_ROLE_ADMIN"/></not> </and> <and> <if-has-permission permission="PROJECTMGR_ROLE_ADMIN"/> <if-compare field="isMember" value="true" operator="equals"/> </and> <and> <if-has-permission permission="PROJECTMGR_VIEW"/> <not><if-has-permission permission="PROJECTMGR_ROLE_VIEW"/></not> <if-compare field="parameters.mainAction" value="VIEW" operator="equals"/> </and> <and> <if-has-permission permission="PROJECTMGR_ROLE_VIEW"/> <if-compare field="isMember" value="true" operator="equals"/> <if-compare field="parameters.mainAction" value="VIEW" operator="equals"/> </and> </or> </condition> <then> <field-to-result field="hasPermission"/> <return/> </then> <else> <property-to-field resource="ProjectMgrUiLabels" property="ProjectMgrNoAccessToProject" field="failMessage"/> <field-to-result field="failMessage"/> <field-to-result field="hasNoPermission" result-name="hasPermission"/> <return/> </else>

condition内部可以放12种条件语句。分别是:

- 阅读剩余部分 -

用eclipse启动(run)或调试(debug)ofbiz项目

受不鸟每次通过startogbiz.bat来启动ofbiz了,于是Google一下简单的按步骤配置了一下:

参考官方配置地址:https://cwiki.apache.org/OFBIZ/running-and-debugging-ofbiz-in-eclipse.html

1.右击项目 -> Debug As -> debug configurations

2.右击Java Application -> New,新建之后每个标签页的具体配置如下:

  • Main
    • Project: OFBiz
    • Main class: org.ofbiz.base.start.Start
  • Arguments
    • VM arguments: -Xms128M -Xmx512M -XX:MaxPermSize=128m  (当然,数据越大越好~看你配置啦!此外,这个也可以留空不填)
    • Working directory: 使用默认的Default就好
  • Classpath
    • Bootstrap Entries: JRE System Library
    • User Entries: 导入ofbiz项目中的"ofbiz.jar"
      • 移除User Entries里的 "ofbiz (default classpath)" 否则可能会报异常 "Can't find bundle for base name cache, locale ..."
  • Source
    • 点击“Add”->"Java Project",选择ofbiz项目
  • Environment
    • 新增一个新的环境变量 LC_ALL=C (可选, 非Linux环境无需配置)

3.右击项目 -> Properties -> Java Build Path -> Libraries -> Add Class Folder ,勾选ofbiz/framework/base/config ,按OK 确定

4.OK,现在可以在eclipse里Run或者Debug啦。

如果有异常“could not load vfs configuration from webslinger……”,直接删除两个文件就可以:

1.删除文件 : OFBIZ_HOME\framework\webslinger\lib\webslinger-20091211-3897-7ab22baea4b6.jar\META-INF\vfs-providers.xml

2.删除文件: OFBIZ_HOME\bin\META-INF\vfs-providers.xml

解决ofbiz的UTF-8乱码问题

新项目要基于OFBIZ进行二次开发,做一个电子商务的网站,由于OFBIZ中FTL模板默认编码是GBK,改模板的时候发现UTF-8显示乱码,万能的GOOGLE之后找到解决方案。
在根目录下startofbiz.bat中找到

"%JAVA_HOME%\bin\java" -Xms128M -Xmx512M -XX:MaxPermSize=128m -jar ofbiz.jar

改为

"%JAVA_HOME%\bin\java" -Xms128M -Xmx512M -XX:MaxPermSize=128m -Dfile.encoding=UTF-8  -jar ofbiz.jar

就是加上了“ -Dfile.encoding=UTF-8 ”这么一句,重新启动后,就能正常显示UTF-8的中文了。

热评文章

最新文章

最近回复

归档

其它