JPractice

JSF+Spring+Hibernate+MySQL 开发商务平台实践

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  12 随笔 :: 0 文章 :: 20 评论 :: 0 Trackbacks

2006年2月5日 #

在JSF中,用Tiles或jsp:include将其他页包含进来的时候,被包含的页面中,所有静态HTML代码都要用<f:verbatim></f:verbatim>括起来,否则就会出现布局错位的问题,真是痛苦!JSF的这个弊端不知道要到什么版本才行解决!
posted @ 2006-03-09 17:55 JPractice 阅读(517) | 评论 (0)编辑 收藏

JSF的东西本来就不好搞,加上Tiles就更麻烦了,特别是在页面格式的布局方面,经常出现一些莫名其妙的东西,花了不是时间,现在还没有完全解决,但基本功能已经可以进行测试了:
目前的功能有:信息发布、导航菜单、栏目维护、文章维护、后台登录,完成了Tiles的组装,首页静态页面的布局分割。现在美工方面进一步加工一下,一个文章发布系统已具雏形,尚且叫它v0.1版吧:)

另外需求稿方面已经进展到v0.7版本,现在这个刚有点形状的文章发布系统是整个大系统的一小部分,不过功能虽少,但主要收获是解决了一些JSF方面经常遇到的问题。


posted @ 2006-03-08 16:11 JPractice 阅读(300) | 评论 (1)编辑 收藏

<h:outputLabel id="" value="#{category.name}" />

上面这行在用sun-ri的应用中不会报错
但在MyFaces中就会报错:
原因就出在id="" 去掉就会好了

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: empty expr
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:121)
	org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsFilter.java:122)
	com.bizcms.view.utils.SecurityFilter.doFilter(Unknown Source)

root cause

javax.faces.FacesException: empty expr
	org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:421)
	org.apache.myfaces.application.jsp.JspTilesViewHandlerImpl.dispatch(JspTilesViewHandlerImpl.java:233)
	org.apache.myfaces.application.jsp.JspTilesViewHandlerImpl.renderView(JspTilesViewHandlerImpl.java:219)
	org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:352)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:107)
	org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsFilter.java:122)
	com.bizcms.view.utils.SecurityFilter.doFilter(Unknown Source)
posted @ 2006-02-18 23:55 JPractice 阅读(936) | 评论 (2)编辑 收藏

一、Action Controller的Action方法中手工获取请求信息
ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
HttpServletRequest request = (HttpServletRequest) context.getRequest();
String email = request.getParameter("form2:email");

二、保护/下面的jsp文件不被直接访问
在web.xml中加入:
<security-constraint>
<display-name>
    Prevent access to raw JSP pages that are for JSF pages.
</display-name>
<web-resource-collection>
    <web-resource-name>Raw-JSF-JSP-Pages</web-resource-name>
    <!-- Add url-pattern for EACH raw JSP page -->
    <url-pattern>/welcome.jsp</url-pattern>
    <url-pattern>/login.jsp</url-pattern>
    ......
</web-resource-collection>
<auth-constraint>
      <description>No roles, so no direct access</description>
</auth-constraint>
</security-constraint>

三、加载国际化资源文件
<f:view locale="#{facesContext.externalContext.request.locale}">
<f:loadBundle basename="messages" var="msgs"/>

/WEB-INF/classes目录下,放messages_cn.properties,message_en.properties.....

待续。。。

posted @ 2006-02-16 16:22 JPractice 阅读(429) | 评论 (0)编辑 收藏

这两天项目的进度放慢了,有2、3天没有写了blog了,现在成功将Tinymce的HTML编辑器整合到项目里面,提供在线的页面编辑功能,经过测试,效果还是很不错的,达到了预期的目标,接下来就是研究首页菜单导航条的设计和Tiles和JSF的整合。。。
posted @ 2006-02-13 09:35 JPractice 阅读(802) | 评论 (1)编辑 收藏

今天看到一则消息,说Borland公司打算出售整个IDE产品线!曾经风光无限的开发工具供应商竟然走到今天这种地步,连自己的看家法宝都打算抛弃,真是感叹啊!市场确实是无情的,手中没有镇山之宝,一直跟在微软屁股后面走,始终都是受制于人,现在在开源IDE的冲击下,最终还是难逃厄运。不过我从.NET出来之后,就一直不看好Borland了,在夹缝中求生存还是难啊.
posted @ 2006-02-09 21:09 JPractice 阅读(342) | 评论 (2)编辑 收藏

今天在跟客户认真地谈了一次需求,双方整理出一份需求稿v0.1版,将几大功能版块总体需求及部分细节、各版块开发紧急程度、前期部分开发任务(有一小部分比较简单的功能由于业务开展的需要)的时间进度初步明确下来。开发团队现在有3人,正在物色一名美工,将来看情况扩充一名开发人员。周6前的工作目标就是进一步跟客户整理和确认需求、相关开发规范资料的收集编写、团队开发沟通平台的准备、确定同客户的沟通机制、团队个人开发环境的准备等等。

posted @ 2006-02-08 23:58 JPractice 阅读(301) | 评论 (0)编辑 收藏

这本书是我今天在整理自己的书柜时找到的,01年买的了,一直没看,今天翻出来浏览了一下目录,主要是介绍小组团队开发的整个过程以及过程中涉及的计划、沟通协调、进度跟踪、需求定义、小组设计、测试、维护等我们比较关心的问题,并提供了一些实际操作性很强的规范。个人感觉非常实用,所以给大家推荐一下:
《小组软件开发过程》 人民邮电出的
《Introduction to the Team Software Process》

posted @ 2006-02-08 00:45 JPractice 阅读(445) | 评论 (1)编辑 收藏

一个是维护栏目表的,目前只实现了简单的增加功能,栏目表最难搞的是实现一对多的自身关联(为了实现不受层次限制)。
另外一个是初步研究了如何实现Html编辑器,能将编辑完的内容存到表的字段中,就像在这里发表随笔的功能;
等这两个功能进一步完善后,就可以维护栏目和每个栏目下的内容,实现栏目内容的分类和在线维护

<hibernate-mapping package=".........................">
  <class name="Category" table="cms_categories" lazy="false">
    <id name="id" type="long" column="CATE_ID">
      <generator class="identity"/>
    </id>
    <property name="name" type="string" column="CATE_NAME" length="60" not-null="true"/>
    <set
       name="childCategories"
       cascade="save-update"
       inverse="true"
    >
       <key column="CATE_CATEGORY_ID" />
       <one-to-many class="Category" />
    </set>
    <many-to-one name="parentCategory" column="CATE_CATEGORY_ID" class="Category" cascade="none" />
  </class>
</hibernate-mapping>
另外哪位熟悉hibernate的朋友,帮我看看,上面是Category类的映射方法,不过当我写:
   Category category = new Category(categoryName);

   // find the new category's parent category object by the param parentCategoryId
   Category parentCategory = categoryDao.getCategory(parentCategoryId);

   if (parentCategory != null) {    
      category.setParentCategory(parentCategory);
      // parentCategory.getChildCategories().add(category);    ************
      categoryDao.save(category);
     ...............................


*******行如果不注释掉就会出Exception,哪位熟悉hibernate的朋友给指点一下
posted @ 2006-02-06 00:37 JPractice 阅读(349) | 评论 (3)编辑 收藏

功能很简单,在Mysql 5中建一个BizCms的DB,然后建一个CMS_SYSUSER的表,里面主要有id, name, password等几个字段,然后利用jsf+spring+hibernate(3)写一个根据用户名、密码登录的小模块,写这个模块花了半天加一个晚上,大部分代码都写得挺顺,但是到最后出了点小问题,就是利用Hibernate 3从mysql表中检索数据的时候,在hibernate的映射文件中,<class...>里面开始没有加lazy="false",原来hibernate 2中记得好像缺省就是false,但在版本3中就出那个LazyInitialization的Exception,由于代码测试还不是很熟(唉,要学的东西还很多!),搞了半天,编了一个小的java applaction来测试才发现那个Exception,不过还是体验了Spring的强大,编写那个小application还是很容易的,不过感觉JSF就不那么好测试了。最后经过努力还是调试成功,也对整个应用的分层设计有了更深的体会,今天总算有点收获吧。

今天要上班了(凌晨了),放完假后就不想每天都弄到凌晨才睡了。。。

今天早上看了一下,exadel中包含的hibernate版本是3.1.0 alpha
posted @ 2006-02-05 00:06 JPractice 阅读(526) | 评论 (3)编辑 收藏