Ehcache is good!
非常轻量,而且可以跟Spring集成。 据说还有人搞出了相关的Annotation,这样一来真的可以对任何对象透明地进行缓存。
非常轻量,而且可以跟Spring集成。 据说还有人搞出了相关的Annotation,这样一来真的可以对任何对象透明地进行缓存。
以 <bean id="myCache" class="org.springframework.cache.ehcache.EhCacheFactoryBean"> 为例, //正确 @Autowired private Ehcache myCache; //因为 EhCacheFactoryBean.getObjectType() == Ehcache //错误: @Autowired private Cache myCache; //会报错,虽然Cache是Ehcache的子类。具体错误为“No unique bean of type [net.sf.ehcache.Cache] is defined”
开发/测试一个 Struts Action/Spring Controller时,要注意覆盖到以下所有功能点/测试点. 1.Form Rendering a.first rendering b.rendering after submission i.successful submission ii.failed submission 2.Validation a.Show Field Errors/Action Errors in validation fails 3.Show Correct Results a. What if no result? b. Results are too few to be paginated. c. Results are so many …
为了用户体验,在Login之后应该自动跳到Login之前的页面 Spring Security作为最成熟的WEB安全框架,它是如何处理这个问题的呢? 我研究了一下代码,其机制大概如下: 1.基本步骤 a.某个未登录的用户执行某个操作 b.Spring Security发现它未登录,于是把当前的请求信息(包括URL,参数,POST/GET)存入SESSION c.然后302到登录页面 d.用户登录 e.Spring Security 发现用户名密码无误,准备执行登录前的请求 f.Spring Security从session中取出上次存入的请求信息,然后发送redirect即可 2.如果上一次请求是POST怎么办? 看代码发现,Spring Security仍然只redirect一个不带参数的URL。但这样的话岂不是导致参数丢失? 不会。因为下一个处理者会从session里面去拿参数。当然下一个处理者不用显式地去访问HttpSession,它仍然只调用 request.getParameter(),只不过这里的request已经被Spring Security封装成为一个特殊的request,这个request覆盖了原始的getParameter()方法。在覆盖的方法中,它会去session里面找参数。
"Struts2 in Action" 里提到可以用 "BaseStrutsTestCase" 做为action测试的基类,并且说可以在 www.arsenalist.com 找到。但www.arsenalist.com 是阿森纳俱乐部相关的一个网站! 幸好在Manning的论坛里提到了这个问题,消息灵通人士透露,这个类可以在以下网址找到。 http://depressedprogrammer.wordpress.com/2007/06/18/unit-testing-struts-2-actions-spring-junit/
如果你的 extremeTable 处在页面下方,则每当你翻一页时,就可以必须把滚动条拖下来才能看到table中的下半部分数据。 如果我们让它在翻页后跳到某个anchor,再把这个anchor的位置设置在表格附近,那这个问题就没那么严重了。 那怎么自动跳到某个anchor呢? 很简单: <ec:table items="apps" action="action.do#resultAnchor" </ec:table>
我们都知道分页查询包括数据库端分页和UI前端分页。 1.如果数据量很小,则无须数据库分页,让extremeTable直接进行UI分页即可。 2.如果数据量比较大,则应该进行数据库分页,并让extremeTable配合。数据库分页大家有自己的方案,这里就不提;我们只说一下extremeTable应该如何配合。 a. 首先,extremeTable显示的“记录总条数”不能等于它即将处理的items数,因为items只代表当页记录。那怎么显示一个记录总条数呢? i.Struts2里应该先忽悠一下,强行指定记录总条数。 //在action里添加这样一个"totalRows"属性 public int getTotalRows() { return 记录总条数; } // "totalRows" 对应的是org.extremecomponents.table.core.TableConstants.TOTAL_ROWS 这个常量。 通过下面的设置,我们将让extremeTable标签从http context中读取"totalRows"。 ii.让extremeTable标签从http context中读取 "totalRows" <@ec.table items="records" … retrieveRowsCallback="limit" > 必须做这个设置,否则extremeTable将把 records.size()当作总记录数。 b.未完待续
很多人想要这个东西,都说可以Interceptor来自动trim掉输入,但为什么就没有人整出来呢? 既然没人弄,那我就弄一个呗。不过,其实,这个类基本是从’Apache Struts 2 Web Application Development’中抄来的,我另外做了一点修改。 public class TrimInterceptor extends MethodFilterInterceptor { private List<String> excluded = new ArrayList<String>(); protected String doIntercept(ActionInvocation invocation) throws Exception { Map<String, Object> parameters = invocation.getInvocationContext().getParameters(); for (String param : parameters.keySet()) { if (isIncluded(param)) { String[] vals = (String[]) parameters.get(param); boolean allNull = true; for (int i = 0; i …
假设 Role是枚举类型, 而 candidateRoles= Role.values() 如果要设定user的roles,则select标签就应该这样写 <@s.select name="user.roles" list="candidateRoles" multiple="true" /> 1. 使用candidateRoles作为候选项 2. name的表达式也直接使用Role类型,同时,不要指定 listKey 和 listValue标签 3. 这样的标签在增/改时都会展现所有侯选Roles,并且,在“修改”页面会自动选中当前已有的Roles.
经过测试发现, 如果 user.name == null,则"name"字段上的 nullable=false 就被违反,hibernate会抛出异常,防止错误数据进入数据库 但如果user.name == "",则 "name"字段上的 nullable=false 没被违反,这个数据会被插到数据库里