![]() |
|
Spaces home 蚯蚓PhotosProfileFriends | ![]() |
|
March 26 终于实现了Tapestry4 EntityForm和QueryTable的组件化取代以前的BaseEditPage 和 BaseListingPage 两个基础抽象类,所有的Page统一继承自 BasePage(自定义的继承自org.apache.tapestry.html.BasePage)
实现BasePage的单一化
QueryTable的实现思路
传入Query和Parameters 取代掉source参数,用Query和Parameters构建一个model提供给TableView
看下demo 类
EmployeeList.java
package app.demo.web.pages;
import java.util.HashMap;
import java.util.Map; import org.apache.commons.lang.StringUtils;
import org.apache.tapestry.IRequestCycle; import org.apache.tapestry.event.PageBeginRenderListener; import org.apache.tapestry.event.PageEvent; import common.tapestry.components.table.QueryTable;
import common.tapestry.html.BasePage; public abstract class EmployeeList extends BasePage implements
PageBeginRenderListener { public abstract String getName(); public void pageBeginRender(PageEvent event) {
} QueryTable getTable_1() {
return (QueryTable) getComponent("table1"); } public void doSubmit() {
Map map = new HashMap(); map.put("A", "1"); String hql = "select a from Employee a where 1=:A"; if(StringUtils.isNotBlank(getName())){ hql = hql +" and a.Name like :name"; map.put("name", "%" + getName() +"%"); } getTable_1().setQueryAndParameters(hql, map); } public void activateExternalPage(Object[] obj,IRequestCycle cycle){
super.activateExternalPage(obj, cycle); getTable_1().setQueryAction(false); } } html模板 <t3 jwcid="table1@ext:QueryTable" title="ognl:components.border.title" columns="a_Name:名字:Name,a_Age:年龄:Age,a_Remark:备注:Remark,a_Birthday:生日:Birthday,!Operate:操作:operate" class="data_window" cellSpacing="1" cellPadding="3" border="0" pageSize="10"> <t3 jwcid="OperateColumnValue@Block"> <a jwcid="@ExternalLink" page="EmployeeEdit" parameters="ognl:{components.table1.row.Id}" > 查 看</a> <a jwcid="delete@ext:EntityDeleteLink" entity="ognl:components.table1.row">删除</a> </t3> </t3> March 24 Extension Tapestry4`s restart service to clear my login cookies接上篇,自定义一个logout service 把我的login cookies 清楚掉 Tapestry .java package common.tapestry; public final class Tapestry { LogoutService.java import java.io.IOException; import org.apache.tapestry.IRequestCycle; import common.tapestry.Tapestry; public class LogoutService extends RestartService {
public void service(IRequestCycle cycle) throws IOException { public String getName() { hivemodule.xml <!-- extends tapestry RestartService and clear the login cookies info--> <contribution configuration-id="tapestry.services.ApplicationServices"> </module> in your Pages How to use cookies in tapestry4? my Tapestry4.1.5`LoginCookiesManagerImplHow to use cookies in tapestry4? my Tapestry4.1.5`LoginCookiesManagerImpl 思路 实现代码如下 package common.tapestry.engine; public interface LoginCookiesManager { public static final String COOKIES_KEY_LOGIN_USERNAME = "USERNAME"; LoginCookiesManagerImpl 实现 package common.tapestry.engine; import org.apache.hivemind.ApplicationRuntimeException; public class LoginCookiesManagerImpl implements LoginCookiesManager { public void setApplicationPropertySource( private String decrypt(String value) { private String encrypt(String value) { private String getCookiesEncryptionKey() { private boolean isCookiesEncryption() { public void removeCookies() { public void writeCookies(String username, String password, int maxAge) { public String getUsername() { public String getPassword() { private void writeCookiesValue_Login__Username(String username, int maxAge) { private void writeCookiesValue_Login__Password(String password, int maxAge) { private String generateApplicationCookiesKey_Login__Username() { private String generateApplicationCookiesKey_Login__Password() { private String generateApplicationCookiesKey(String key) { public void setCookieSource(CookieSource cookieSource) { public void setRequest(WebRequest request) { public void setAbsoluteURLBuilder(AbsoluteURLBuilder absoluteURLBuilder) { } hivemodule.xml配置 <?xml version="1.0"?> <contribution configuration-id="tapestry.Infrastructure"> 使用 在BasePage中获得该service public LoginCookiesManager getLoginCookiesManager() { if (!(asmVisit instanceof IVisit)) {
import org.apache.tapestry.IRequestCycle; public interface IConstructVisit {
Tapestry4.1.5`s common Base Border ComponentTapestry4.1.5`s common Base Border Component 考虑到每个项目都必须具有Border组件,所以把这个组件提到Base项目的ext组件库 来看我们的Border.jwc规范 <?xml version="1.0" encoding="UTF-8"?> <component-specification allow-body="yes" allow-informal-parameters="no" class="common.tapestry.components.Border"> <component id="shell" type="Shell"> <inject property="httpServletRequest" object="service:tapestry.globals.HttpServletRequest"/> <!-- html模板 <html jwcid="shell">
package common.tapestry.components; import java.io.IOException; import javax.servlet.ServletContext; import org.apache.tapestry.BaseComponent; public abstract class Border extends BaseComponent { public abstract HttpServletRequest getHttpServletRequest(); public abstract WebContext getWebContext(); public static final String APPLICATION_META_KEY_DEFAULT_BORDER_STYLE = "common.tapestry.components.border.stylesheets"; public String getStylesheetResource() { public abstract IAsset[] getCssAsset(); public abstract void setCssAsset(IAsset[] oo); public IAsset[] getStylesheets() { if (getCssAsset() == null) { String _stylesheetResource = (getStylesheetResource() != null) ? getStylesheetResource() String[] _stylesheetResources = _stylesheetResource.split(","); for (int i = 0; i < _stylesheetResources.length; i++) { try { for (int j = 0; j < resources.length; j++) { WebContextResource _resourceLocation = new WebContextResource( } catch (IOException e) { IAsset[] tmp = (IAsset[])list.toArray(new IAsset[list.size()]); March 21 Tapestry4.1.5 how to inject spring`s bean to pagesTapestry4.1.5 how to inject spring`s bean to pages 1、in web.xml config spring <context-param> <listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener> 2、put the tapestry-spring-1.0.0.jar to your classpath
but how to get the spring`s beans in the java code ? 3、config your ${yourApp}/WEB-INF/hivemodule.xml <contribution configuration-id="tapestry.Infrastructure"> put the springObjectProvider to the tapestry.Infrastructure ok in your code you can org.apache.hivemind.service.ObjectProvider springprovider springprovider = (ObjectProvider) infrastructure.getProperty("springprovider"); YourSpringBean yourSpringBean = (YourSpringBean)springprovider.provideObject(null, null, yourSpringBeanId, null);
皮鞋又坏了皮鞋又坏了,该买新的了 May 14 Tapestry5的无侵入式框架实现use Annotations?Tapestry5称使用JDK5的Annotations实现无侵入式的框架,我看起来Annotations依然是侵入到了类,:(
敏捷的思维正在一步步渗透到Java Framework中,现在不仅要求类与类之间要解藕,类和Framework之间也要解耦,
途径:1)硬编码,extends/implements
2)xml
3)Framework的实践约定,比如说 public void **doActionListener(),方法名称的匹配说明了这是个Action监听器,够敏捷吧
我期待的Tapestry Control BackingBean是更纯的Java类,看来这个实现除了xml + implments,只剩下Framework的约定才能实现了,毕竟不用xml,不用Annotations,不用extends/implements 你得告诉Framework container 这个BackingBean 是怎么跟template粘起来的!
May 06 革命“在我们力图改善文明这个整体的种种努力中,我们还必须始终在这个给定的整体中进行工作,旨在点滴建设,而不是全盘的建构,并在发展的每一个阶段中都运用既有的历史材料,一步一步地改进细节,而不是力图重新建设这个整体。” ——著名政治思想家弗里德里希·冯·哈耶克 April 28 DAO exception/business exception 粒度Interface UserInfo{
public void login(String userName,String password) throw Exception/RuntimeException/or CustomException/or CustomRuntimeException
}
UserNotFonundException extends Exception ?
PassWordWorngException ?
Whe in Action/listener
use try{
}catch(){
throw new ApplicationRuntimeException(e.getMessage());
}
困惑中~
DAO / Service层的划分由于Hibernate等ORM映射tools的出现,DAO并不在直接跟数据库RDB打交道,而是多了 应用服务器持久层,从广义上讲RDB也算是持久,
应用服务器对象持久层 是为了能管理ORM映射的对象的状态和周期而存在的
DAO ---> Persisent ---->RDB
April 23 When customEditorConfigurer depend on propertyConfigurer <bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath*:jdbc-dev.properties</value> </list> </property> </bean> 某一个CustomEditorConfigurer依赖Datasource,Datasource依赖propertyConfigurer
这时候propertyConfigurer没有生效
抛出错误
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customEditorConfigurer' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot create inner bean 'acegi.security.service.impl.DataSourceMethodDefinitionSourceEditor#f38b42' of type [acegi.security.service.impl.DataSourceMethodDefinitionSourceEditor] while setting bean property 'customEditors' with key [TypedStringValue: value [org.acegisecurity.intercept.method.MethodDefinitionSource], target type [null]]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'acegi.security.service.impl.DataSourceMethodDefinitionSourceEditor#f38b42' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot resolve reference to bean 'jdbcTemplate' while setting bean property 'jdbcTemplate'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jdbcTemplate' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-datasource.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClass' threw exception; nested exception is java.beans.PropertyVetoException: Could not locate driver class with name '${jdbc.driverClassName}'. Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'acegi.security.service.impl.DataSourceMethodDefinitionSourceEditor#f38b42' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot resolve reference to bean 'jdbcTemplate' while setting bean property 'jdbcTemplate'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jdbcTemplate' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-datasource.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are: PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClass' threw exception; nested exception is java.beans.PropertyVetoException: Could not locate driver class with name '${jdbc.driverClassName}'. Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jdbcTemplate' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-datasource.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are: PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClass' threw exception; nested exception is java.beans.PropertyVetoException: Could not locate driver class with name '${jdbc.driverClassName}'. Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-datasource.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are: PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClass' threw exception; nested exception is java.beans.PropertyVetoException: Could not locate driver class with name '${jdbc.driverClassName}'. Caused by: org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessException details (1) are: PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClass' threw exception; nested exception is java.beans.PropertyVetoException: Could not locate driver class with name '${jdbc.driverClassName}'. Caused by: java.beans.PropertyVetoException: Could not locate driver class with name '${jdbc.driverClassName}'. at com.mchange.v2.c3p0.DriverManagerDataSource$1.vetoableChange(DriverManagerDataSource.java:68) at java.beans.VetoableChangeSupport.fireVetoableChange(VetoableChangeSupport.java:300) at java.beans.VetoableChangeSupport.fireVetoableChange(VetoableChangeSupport.java:217) at com.mchange.v2.c3p0.impl.DriverManagerDataSourceBase.setDriverClass(DriverManagerDataSourceBase.java:65) at com.mchange.v2.c3p0.ComboPooledDataSource.setDriverClass(ComboPooledDataSource.java:119) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:821) at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:645) at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:78) at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:59) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1100) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:835) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:423) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:144) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:261) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:109) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1073) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:835) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:423) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:144) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:261) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:109) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1073) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:835) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:423) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:215) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:122) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedMap(BeanDefinitionValueResolver.java:314) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:139) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1073) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:835) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:423) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:144) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160) at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:426) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:342) at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:241) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:184) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49) at weblogic.servlet.internal.WebAppServletContext$FireContextListenerAction.run(WebAppServletContext.java:6515) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118) at weblogic.servlet.internal.WebAppServletContext.notifyCreated(WebAppServletContext.java:1666) at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:3203) at weblogic.servlet.internal.HttpServer.preloadResources(HttpServer.java:694) at weblogic.servlet.internal.WebService.preloadResources(WebService.java:483) at weblogic.servlet.internal.ServletInitService.resume(ServletInitService.java:30) at weblogic.t3.srvr.SubsystemManager.resume(SubsystemManager.java:131) at weblogic.t3.srvr.T3Srvr.resume(T3Srvr.java:966) at weblogic.t3.srvr.T3Srvr.run(T3Srvr.java:361) at weblogic.Server.main(Server.java:32) <2007-4-23 下午09时38分10秒 CST> <Warning> <HTTP> <BEA-101162> <User defined listener org.springframework.web.context.ContextLoaderListener failed: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customEditorConfigurer' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot create inner bean 'acegi.security.service.impl.DataSourceMethodDefinitionSourceEditor#f38b42' of type [acegi.security.service.impl.DataSourceMethodDefinitionSourceEditor] while setting bean property 'customEditors' with key [TypedStringValue: value [org.acegisecurity.intercept.method.MethodDefinitionSource], target type [null]]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'acegi.security.service.impl.DataSourceMethodDefinitionSourceEditor#f38b42' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot resolve reference to bean 'jdbcTemplate' while setting bean property 'jdbcTemplate'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jdbcTemplate' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-datasource.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are: PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClass' threw exception; nested exception is java.beans.PropertyVetoException: Could not locate driver class with name '${jdbc.driverClassName}'..> 2007-04-23 21:38:10,609 DEBUG - - HttpSessionEventPublisher - Received ServletContextEvent: javax.servlet.ServletContextEvent[source=ServletContext(id=31277299,name=web,context-path=/study)] <2007-4-23 下午09时38分10秒 CST> <Warning> <HTTP> <BEA-101162> <User defined listener org.acegisecurity.ui.session.HttpSessionEventPublisher failed: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customEditorConfigurer' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot create inner bean 'acegi.security.service.impl.DataSourceMethodDefinitionSourceEditor#f38b42' of type [acegi.security.service.impl.DataSourceMethodDefinitionSourceEditor] while setting bean property 'customEditors' with key [TypedStringValue: value [org.acegisecurity.intercept.method.MethodDefinitionSource], target type [null]]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'acegi.security.service.impl.DataSourceMethodDefinitionSourceEditor#f38b42' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot resolve reference to bean 'jdbcTemplate' while setting bean property 'jdbcTemplate'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jdbcTemplate' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-datasource.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are: PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClass' threw exception; nested exception is java.beans.PropertyVetoException: Could not locate driver class with name '${jdbc.driverClassName}'..> <2007-4-23 下午09时38分10秒 CST> <Error> <HTTP> <BEA-101165> <Could not load user defined filter in web.xml: org.acegisecurity.util.FilterToBeanProxy. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customEditorConfigurer' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot create inner bean 'acegi.security.service.impl.DataSourceMethodDefinitionSourceEditor#f38b42' of type [acegi.security.service.impl.DataSourceMethodDefinitionSourceEditor] while setting bean property 'customEditors' with key [TypedStringValue: value [org.acegisecurity.intercept.method.MethodDefinitionSource], target type [null]]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'acegi.security.service.impl.DataSourceMethodDefinitionSourceEditor#f38b42' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot resolve reference to bean 'jdbcTemplate' while setting bean property 'jdbcTemplate'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jdbcTemplate' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-datasource.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are: PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClass' threw exception; nested exception is java.beans.PropertyVetoException: Could not locate driver class with name '${jdbc.driverClassName}'. Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'acegi.security.service.impl.DataSourceMethodDefinitionSourceEditor#f38b42' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot resolve reference to bean 'jdbcTemplate' while setting bean property 'jdbcTemplate'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jdbcTemplate' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-datasource.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are: PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClass' threw exception; nested exception is java.beans.PropertyVetoException: Could not locate driver class with name '${jdbc.driverClassName}'. Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jdbcTemplate' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-datasource.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are: PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClass' threw exception; nested exception is java.beans.PropertyVetoException: Could not locate driver class with name '${jdbc.driverClassName}'. Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-datasource.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are: PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClass' threw exception; nested exception is java.beans.PropertyVetoException: Could not locate driver class with name '${jdbc.driverClassName}'. Caused by: org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessException details (1) are: PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClass' threw exception; nested exception is java.beans.PropertyVetoException: Could not locate driver class with name '${jdbc.driverClassName}'. Caused by: java.beans.PropertyVetoException: Could not locate driver class with name '${jdbc.driverClassName}'. at com.mchange.v2.c3p0.DriverManagerDataSource$1.vetoableChange(DriverManagerDataSource.java:68) at java.beans.VetoableChangeSupport.fireVetoableChange(VetoableChangeSupport.java:300) at java.beans.VetoableChangeSupport.fireVetoableChange(VetoableChangeSupport.java:217) at com.mchange.v2.c3p0.impl.DriverManagerDataSourceBase.setDriverClass(DriverManagerDataSourceBase.java:65) at com.mchange.v2.c3p0.ComboPooledDataSource.setDriverClass(ComboPooledDataSource.java:119) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:821) at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:645) at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:78) at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:59) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1100) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:835) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:423) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:144) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:261) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:109) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1073) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:835) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:423) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:144) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:261) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:109) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1073) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:835) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:423) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:215) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:122) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedMap(BeanDefinitionValueResolver.java:314) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:139) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1073) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:835) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:423) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:144) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160) at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:426) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:342) at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:241) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:184) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49) at weblogic.servlet.internal.WebAppServletContext$FireContextListenerAction.run(WebAppServletContext.java:6515) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118) at weblogic.servlet.internal.WebAppServletContext.notifyCreated(WebAppServletContext.java:1666) at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:3203) at weblogic.servlet.internal.HttpServer.preloadResources(HttpServer.java:694) at weblogic.servlet.internal.WebService.preloadResources(WebService.java:483) at weblogic.servlet.internal.ServletInitService.resume(ServletInitService.java:30) at weblogic.t3.srvr.SubsystemManager.resume(SubsystemManager.java:131) at weblogic.t3.srvr.T3Srvr.resume(T3Srvr.java:966) at weblogic.t3.srvr.T3Srvr.run(T3Srvr.java:361) at weblogic.Server.main(Server.java:32) March 27 利用org.apache.commons.io.FileUtils快速读写文件String fileName = "C://11.txt"; File file = new File(fileName); String fileContent = ""; try { fileContent = org.apache.commons.io.FileUtils.readFileToString(file, "GBK"); } catch (IOException e) { e.printStackTrace(); } fileContent +="Helloworld"; try { org.apache.commons.io.FileUtils.writeStringToFile(file, fileContent, "GBK"); } catch (IOException e) { e.printStackTrace(); } Tapestry4Localization本地/国际化1、方法1 -- 使用Tapestry内置message
1)Home.html
<span jwcid="@Insert" value="message:required"/> //使用message前缀 或者使用ognl:messages
<span jwcid="@Insert" value="ognl:messages.format('required', '第{0}个元素','第{1}个元素')"/>
不建议使用
<span jwcid="@Insert" value="ognl:getMessage('required')"/> 因为getMessage方法在T4中被@deprecated -----the key 'title'---- will be first find in Home_zh.properties or Home.properties
if in Home.properties can not be founded
it will find WEB-INF/myapp.properties,
The specification may also have a message catalog; for instance, for WEB-INF/myapp.application, the files would be named WEB-INF/myapp.properties, etc. Again, the name of the file is based on the servlet name ("myapp"). 2)
myapp_zh.properties required=\u8bf7\u8f93\u5165{0}\u7684\u503c{1} 3)
Home_zh.properties required=\u8bf7\u8f93\u5165{0}\u7684\u503c{1} 2、方法2 --使用spring的MessageSource
1)利用spring加载messges_*local.properties <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <!--<property name="basename" value="classpath:messages"/>--> <property name="basenames"> <list> <value>classpath:messages</value> </list> </property> </bean> 把messageSource注入到Tapestry Components/Pages中 2)BasePage.java
import org.springframework.context.MessageSource;
public abstract BasePage extends org.apache.tapestry.html.BasePage{
public abstract MessageSource getMessageSource();
//need inject //or direct impl it; } 3)HomePage.java extends BasePage.java 4)Home.page
<inject property="messageSource" object="spring:messageSource" /> 5)Home.html <span jwcid="@Insert" value="ognl:messageSource.getMessage('required',new java.lang.Object [] {'Login','!'}, 'Default', null)"/>
6)messges_zh.properties
required=\u8bf7\u8f93\u5165{0}\u7684\u503c{1} ------------------------------------------------------------------ 7)或者再封装以下 public abstract BasePage extends org.apache.tapestry.html.BasePage{ public abstract MessageSource getMessageSource(); public String getCustomMessage(java.lang.String arg0,java.lang.Object[] arg1,java.lang.String arg2,java.util.Locale arg3){ return this.getMessageSource().getMessage(arg0,arg1,arg2,arg3); } } then in the Home.html <span jwcid="@Insert" value="ognl:getCustomMessage('required',new java.lang.Object [] {'Login','!'}, 'Default', null)"/>
在web application 调用Spring的Beanfactory1)配置web.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <context-param> <param-name>contextConfigLocation</param-name> <!-- 配置加载的bean factory xml --> <param-value> WEB-INF/applicationContext*.xml classpath:applicationContext-datasource.xml classpath:applicationContext-hibernate.xml classpath:applicationContext-dao.xml classpath:applicationContext-service.xml </param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> </web-app> 2)Jsp页面中调用spring
<% org.springframework.beans.factory.BeanFactory beanFactory = (org.springframework.beans.factory.BeanFactory) pageContext.getServletContext().getAttribute(org.springframework.web.context.WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE); %>
3)Servlet中调用spring ServletContext context = this.getServletContext();
org.springframework.beans.factory.BeanFactory beanFactory = (org.springframework.beans.factory.BeanFactory) context.getAttribute(org.springframework.web.context.WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE); 4)ClassPath加载
ApplicationContext beanFactory = new ClassPathXmlApplicationContext(
new String[] { "applicationContext-datasource.xml", "applicationContext-hibernate.xml", "applicationContext-service-freemarker.xml", "applicationContext-service.xml" }); March 26 ActiveRecord or 贫血的POJOActiveRecord实现Dao 和business validation 的功能似乎更能快速的开发整个项目,但他的Dao实现必须继承,导致 code 不pure
我们可以把外部的Crud操作集中到一个Container or Tier中实现,这个Container或者Tier (Persist Logic)中操作的可能不是pure 的POJO 而是Container Wapper后的ActiveRecord,我们不用去关心,交给EntityManager来管理好了
这样我们不用继承ActiveRecord Base!! Run Jboss seamRun Jboss seam On my computer 4、Run Jboss AS
就seam的booking demo而言 --------------------------------------------------------------------------------- ORM pojo (数据库映射对象) --- business domain class领域模型(业务对象)
Active Record ActiveRecord - 活动记录 :一个对象,它包装数据库表或视图中的某一行,封装数据库访问,并在这些数据上增加了领域逻辑。
拆分 POJO or ActiveRecord? |