??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
]]>
]]>
]]>
]]>
]]>
]]>
1. 安装acegi plugin
2. acegi的一些概念以及用法参?
http://grails.org/plugin/acegi
http://www.infoq.com/cn/articles/grails-acegi-integration
3. 问题
在grails中,默认生成的show.gsp中是使用一个form带多个参数来提交Q比?_action_Edit=edit 或??_action_Delete=delete,
但对于requestmapQ它实际是对于urlq行限制的,q没有对参数做限Ӟ所以这时?grails提交的action׃会被requestmap到?br />
4. Ҏ
requestmap权限分配机制cM如下Q这里只是demo?br />
实际中,可以在UI界面上通过使用checkbox来代替该requestmap的URI stringQ完成对roleq行权限的分配?br />
2 url: '/project/list**',
3 configAttribute: 'ROLE_USER, ROLE_ADMIN'
4 )
5 projectListMap.save()
6
7
8 def projectCreateMap = new Requestmap(
9 url: '/project/create**',
10 configAttribute: 'ROLE_ADMIN'
11 )
12 projectCreateMap.save()
13
14 def projectEditMap = new Requestmap(
15 url: '/project/edit**',
16 configAttribute: 'ROLE_ADMIN'
17 )
采用原生的html form代替grails的actionSubmitQ显C的提交urlQ比?br />
使用
2 ..
3 </form>
4 <form action="/todolist/project/delete" method="post" >
5 ..
6 </form>
代替原来?nbsp;
2 <g:hiddenField name="id" value="${projectInstance?.id}" />
3 <span class="button"><g:actionSubmit class="edit" action="edit" value="${message(code: 'default.button.edit.label', default: 'Edit')}" /></span>
4 <span class="button"><g:actionSubmit class="delete" action="delete" value="${message(code: 'default.button.delete.label', default: 'Delete')}" onclick="return confirm('${message(code: 'default.button.delete.confirm.message', default: 'Are you sure?')}');" /></span>
5 </g:form>
4.参?br />
http://grails.1312388.n4.nabble.com/acegi-requestmap-how-to-inspect-URL-parameters-td1382988.html
5. 关于q种方式Q有一些缺点,是使用原来的方式可以绕开requestmap的限Ӟ具体L
http://grails.1312388.n4.nabble.com/Unexpected-observations-using-spring-security-acegi-plugin-td1349785.html
]]>
字符?Character set)和排序方?Collation)?
对于字符集的支持l化到四个层?
服务?server)Q数据库(database)Q数据表(table)和连?connection)?nbsp; 阅读全文
]]>
]]>
]]>
]]>
]]>
]]>
它可以让你在览器中的Javascript代码调用Web服务器上的Java 代码Q就像在Java代码在览器中一栗?
DWR包含 2个主要部分:
一个运行在服务器端的Java ServletQ它处理hq且向浏览器发回响应?/span>
一个运行在览器端的JavaScriptQ它发送请求而且q能动态更新网c?
DWR工作原理是通过动态把Javacȝ成ؓJavascript。它的代码就像Ajax法一P你感觉调用就像发
生在览器端Q但是实际上代码调用发生在服务器端,DWR负责数据的传递和转换。这U从Java ?/span>
JavaScript的远E调用功能的方式使DWR用v来有U非常像RMI或者SOAP的常规RPC机制Q而且DWR
的优点在于不需要Q何的|页览器插件就能运行在|页上?
Java从根本上讲是同步机制Q然 AJAX却是异步的。所以你调用q程ҎӞ当数据已l从|络上返?/span>
的时候,你要提供有反?QcallbackQ?功能的DWR?/span>
W?1?DWR 例子QHello World
1) 从官方网站下载dwr.jar包。然后将它放在你 webapp ?WEB-INF/lib目录下?/span>
2) 修改web.xml,如下
<?xml version="1.0" encoding="ISO-8859-1"?>
<!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 id="dwr">
<display-name>DWR (Direct Web Remoting)</display-name>
<description>A Simple Demo DWR</description>
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
</web-app>
3) 在WEB-INF下新建dwr.xml,内容如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">
<dwr>
<allow>
<create creator="new" javascript="service">
<param name="class"
value="helloworld.Service"/>
</create>
</allow>
</dwr>
4) 启动web服务器,讉Khttp://localhost/工程/dwr ,面l果昄?/span>
Classes known to DWR:
* service (helloworld.Service)
5) 点击q入 *service,看到提示....
Methods For: service (helloworld.Service)
To use this class in your javascript you will need the following script includes:
<script type='text/javascript' src='/TestDWR/dwr/interface/service.js'></script>
<script type='text/javascript' src='/TestDWR/dwr/engine.js'></script>
In addition there is an optional utility script:
<script type='text/javascript' src='/TestDWR/dwr/util.js'></script>
Replies from DWR are shown with a yellow background if they are simple or in an alert box otherwise.
The inputs are evaluated as Javascript so strings must be quoted before execution.
There are 10 declared methods:
* sayHello( );
* hashCode( );
(Warning: hashCode() is excluded: Methods defined in java.lang.Object are not accessible. See below)
* getClass( );
(Warning: No Converter for java.lang.Class. See below)
(Warning: getClass() is excluded: Methods defined in java.lang.Object are not accessible. See below)
* wait( );
(Warning: overloaded methods are not recommended. See below)
(Warning: wait() is excluded: Methods defined in java.lang.Object are not accessible. See below)
* wait( , );
(Warning: overloaded methods are not recommended. See below)
(Warning: wait() is excluded: Methods defined in java.lang.Object are not accessible. See below)
* wait( );
(Warning: overloaded methods are not recommended. See below)
(Warning: wait() is excluded: Methods defined in java.lang.Object are not accessible. See below)
* equals( );
(Warning: No Converter for java.lang.Object. See below)
(Warning: equals() is excluded: Methods defined in java.lang.Object are not accessible. See below)
* notify( );
(Warning: notify() is excluded: Methods defined in java.lang.Object are not accessible. See below)
* notifyAll( );
(Warning: notifyAll() is excluded: Methods defined in java.lang.Object are not accessible. See below)
* toString( );
(Warning: toString() is excluded: Methods defined in java.lang.Object are not accessible. See below)
6)创徏jspQ内容如?/span>
<%@ page language="java" pageEncoding="UTF-8"%>
<html>
<head>
<script type='text/javascript' src='dwr/interface/service.js'></script>
<script type='text/javascript' src='dwr/engine.js'></script>
<script type='text/javascript' src='dwr/util.js'></script>
</script>
<script type="text/javascript">
function firstDwr(){
service.sayHello(" Test ",callBackHello);
}
function callBackHello(data){
alert(data);
}
</script>
</head>
<body>
<input type="button" name="button" value="试" onclick="firstDwr()">
</body>
</html>
当点?试"Ӟ出现结果了.
ȝ:
1.在web.xml中加入dwr servlet
2.在drw.xml中指明你要调用的c?q指明生成的javascript?/span>
<create creator="new" javascript="service">
<param name="class" value="helloworld.Service"/>
</create>
3.完成对应的类
4.在html/jsp中写javascript函数Q调用java服务器端的方法,q写处理l果的回调函?/span>
其中不少都是大小写、配|文件的讄不当D , 下面ȝ一下今天遇到的问题及解军_?/span> .
一 基本步骤如下 ( 文档中已l提?/span> )
1. Ҏ Hibernate Tools 生成对应?/span> domain 对象
2. 修改 dataAccessContext-hibernate.xml, 你的新 domain 对象加入
< property name = "annotatedClasses" > ?/span>
3. 生成对象?/span> xxxManager cd , 一定要注意cM的泛?/span> , q且注意生成Ҏ的名U?/span>
4. 生成对象?/span> xxxManagerTest c?/span> ,
5. 修改 src/recources/spring / serviceContext.xml, 加入 xxxManager, ׃使用 byName q行的注入,所以配|文件比较简?/span>
6. 生成 web 上的 xxxAction, 一定要注意泛Ş , q且注意生成Ҏ的名U?/span>
7. 修改 struts-config(-module).xml, d生成?/span> xxxAction
?/span> 常见错误
1. 如果配置文g写的有问题,一般会提示 ”nested Exception” 的错?/span>
2. 配置 ServiceContext.xml Ӟ一定要注意大小写问?/span>
<
bean
id
=
"orderManager"
class
=
"org.wl.service.OrderManager"
/>
今天把
id
的值写成了cdU?/span>
OrderManager,
l果提示错误
”Error Create Bean……”
3. 我用的 mysql, 用户?/span> root, 但是?/span> Jdbc.properties 配置文g中用户名写成?/span> sa,
l果可以讉K数据库,当在 web 界面上点?/span> save Q提交后提示 “no row with the given identifier exists”
4. 如果需要?/span> extremeTable, 记得?/span> jsp 中引?/span>
<%@ taglib uri="http://www.extremecomponents.org" prefix="ec" %>