锘??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. 闂
鍦╣rails涓紝榛樿鐢熸垚鐨剆how.gsp涓槸浣跨敤涓涓猣orm甯﹀涓弬鏁版潵鎻愪氦錛屾瘮濡?_action_Edit=edit 鎴栬??_action_Delete=delete,
浣嗗浜巖equestmap錛屽畠瀹為檯鏄浜巙rl榪涜闄愬埗鐨勶紝騫舵病鏈夊鍙傛暟鍋氶檺鍒訛紝鎵浠ヨ繖鏃跺?grails鎻愪氦鐨刟ction灝變笉浼氳requestmap媯嫻嬪埌銆?br />
4. 鏂規
requestmap鏉冮檺鍒嗛厤鏈哄埗綾諱技濡備笅錛岃繖閲屽彧鏄痙emo銆?br />
瀹為檯涓紝鍙互鍦║I鐣岄潰涓婇氳繃浣跨敤checkbox鏉ヤ唬鏇胯requestmap鐨刄RI string錛屽畬鎴愬role榪涜鏉冮檺鐨勫垎閰嶃?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 )
閲囩敤鍘熺敓鐨刪tml form浠f浛grails鐨刟ctionSubmit錛屾樉紺虹殑鎻愪氦url錛屾瘮濡?br />
浣跨敤
2 ..
3 </form>
4 <form action="/todolist/project/delete" method="post" >
5 ..
6 </form>
浠f浛鍘熸潵鐨?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. 鍏充簬榪欑鏂瑰紡錛屾湁涓浜涚己鐐癸紝灝辨槸浣跨敤鍘熸潵鐨勬柟寮忓彲浠ョ粫寮requestmap鐨勯檺鍒訛紝鍏蜂綋璇風湅
http://grails.1312388.n4.nabble.com/Unexpected-observations-using-spring-security-acegi-plugin-td1349785.html
]]>
瀛楃闆?Character set)鍜屾帓搴忔柟寮?Collation)銆?
瀵逛簬瀛楃闆嗙殑鏀寔緇嗗寲鍒板洓涓眰嬈?
鏈嶅姟鍣?server)錛屾暟鎹簱(database)錛屾暟鎹〃(table)鍜岃繛鎺?connection)銆?nbsp; 闃呰鍏ㄦ枃
]]>
]]>
]]>
]]>
]]>
]]>
瀹冨彲浠ヨ浣犲湪嫻忚鍣ㄤ腑鐨凧avascript浠g爜璋冪敤Web鏈嶅姟鍣ㄤ笂鐨凧ava 浠g爜錛屽氨鍍忓湪Java浠g爜灝卞湪嫻忚鍣ㄤ腑涓鏍楓?
DWR鍖呭惈 2涓富瑕侀儴鍒嗭細
涓涓繍琛屽湪鏈嶅姟鍣ㄧ鐨凧ava Servlet錛屽畠澶勭悊璇鋒眰騫朵笖鍚戞祻瑙堝櫒鍙戝洖鍝嶅簲銆?/span>
涓涓繍琛屽湪嫻忚鍣ㄧ鐨凧avaScript錛屽畠鍙戦佽姹傝屼笖榪樿兘鍔ㄦ佹洿鏂扮綉欏點?
DWR宸ヤ綔鍘熺悊鏄氳繃鍔ㄦ佹妸Java綾葷敓鎴愪負Javascript銆傚畠鐨勪唬鐮佸氨鍍廇jax欖旀硶涓鏍鳳紝浣犳劅瑙夎皟鐢ㄥ氨鍍忓彂
鐢熷湪嫻忚鍣ㄧ錛屼絾鏄疄闄呬笂浠g爜璋冪敤鍙戠敓鍦ㄦ湇鍔″櫒绔紝DWR璐熻矗鏁版嵁鐨勪紶閫掑拰杞崲銆傝繖縐嶄粠Java 鍒?/span>
JavaScript鐨勮繙紼嬭皟鐢ㄥ姛鑳界殑鏂瑰紡浣緿WR鐢ㄨ搗鏉ユ湁縐嶉潪甯稿儚RMI鎴栬匰OAP鐨勫父瑙凴PC鏈哄埗錛岃屼笖DWR
鐨勪紭鐐瑰湪浜庝笉闇瑕佷換浣曠殑緗戦〉嫻忚鍣ㄦ彃浠跺氨鑳借繍琛屽湪緗戦〉涓娿?
Java浠庢牴鏈笂璁叉槸鍚屾鏈哄埗錛岀劧 AJAX鍗存槸寮傛鐨勩傛墍浠ヤ綘璋冪敤榪滅▼鏂規硶鏃訛紝褰撴暟鎹凡緇忎粠緗戠粶涓婅繑鍥?/span>
鐨勬椂鍊欙紝浣犺鎻愪緵鏈夊弽璋?錛坈allback錛?鍔熻兘鐨凞WR銆?/span>
絎?1涓?DWR 渚嬪瓙錛欻ello World
1) 浠庡畼鏂圭綉绔欎笅杞絛wr.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) 鍦╓EB-INF涓嬫柊寤篸wr.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鏈嶅姟鍣紝璁塊棶http://localhost/宸ョ▼/dwr ,欏甸潰緇撴灉鏄劇ず涓?/span>
Classes known to DWR:
* service (helloworld.Service)
5) 鐐瑰嚮榪涘叆 *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)鍒涘緩jsp錛屽唴瀹瑰涓?/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.鍦╳eb.xml涓姞鍏wr servlet
2.鍦╠rw.xml涓寚鏄庝綘瑕佽皟鐢ㄧ殑綾?騫舵寚鏄庣敓鎴愮殑javascript鍚?/span>
<create creator="new" javascript="service">
<param name="class" value="helloworld.Service"/>
</create>
3.瀹屾垚瀵瑰簲鐨勭被
4.鍦╤tml/jsp涓啓javascript鍑芥暟錛岃皟鐢╦ava鏈嶅姟鍣ㄧ鐨勬柟娉曪紝騫跺啓澶勭悊緇撴灉鐨勫洖璋冨嚱鏁?/span>
鍏朵腑涓嶅皯閮芥槸澶у皬鍐欍侀厤緗枃浠剁殑璁劇疆涓嶅綋瀵艱嚧 , 涓嬮潰灝辨葷粨涓涓嬩粖澶╅亣鍒扮殑闂鍙婅В鍐沖姙娉?/span> .
涓 鍩烘湰姝ラ濡備笅 ( 鏂囨。涓凡緇忔彁鍒?/span> )
1. 鏍規嵁 Hibernate Tools 鐢熸垚瀵瑰簲鐨?/span> domain 瀵硅薄
2. 淇敼 dataAccessContext-hibernate.xml, 灝嗕綘鐨勬柊 domain 瀵硅薄鍔犲叆
< property name = "annotatedClasses" > 涓?/span>
3. 鐢熸垚瀵硅薄鐨?/span> xxxManager 綾誨悗 , 涓瀹氳娉ㄦ剰綾諱腑鐨勬硾褰?/span> , 騫朵笖娉ㄦ剰鐢熸垚鏂規硶鐨勫悕縐?/span>
4. 鐢熸垚瀵硅薄鐨?/span> xxxManagerTest 綾?/span> ,
5. 淇敼 src/recources/spring / serviceContext.xml, 鍔犲叆 xxxManager, 鐢變簬浣跨敤 byName 榪涜鐨勬敞鍏ワ紝鎵浠ラ厤緗枃浠舵瘮杈冪畝鍗?/span>
6. 鐢熸垚 web 涓婄殑 xxxAction, 涓瀹氳娉ㄦ剰娉涘艦 , 騫朵笖娉ㄦ剰鐢熸垚鏂規硶鐨勫悕縐?/span>
7. 淇敼 struts-config(-module).xml, 娣誨姞鐢熸垚鐨?/span> xxxAction
浜?/span> 甯歌閿欒
1. 濡傛灉閰嶇疆鏂囦歡鍐欑殑鏈夐棶棰橈紝涓鑸細鎻愮ず ”nested Exception” 鐨勯敊璇?/span>
2. 閰嶇疆 ServiceContext.xml 鏃訛紝涓瀹氳娉ㄦ剰澶у皬鍐欓棶棰?/span>
<
bean
id
=
"orderManager"
class
=
"org.wl.service.OrderManager"
/>
浠婂ぉ灝辨妸
id
鐨勫煎啓鎴愪簡綾誨悕縐?/span>
OrderManager,
緇撴灉鎻愮ず閿欒
”Error Create Bean……”
3. 鎴戜嬌鐢ㄧ殑 mysql, 鐢ㄦ埛涓?/span> root, 浣嗘槸灝?/span> Jdbc.properties 閰嶇疆鏂囦歡涓敤鎴峰悕鍐欐垚浜?/span> sa,
緇撴灉鍙互璁塊棶鏁版嵁搴擄紝褰撳湪 web 鐣岄潰涓婄偣鍑?/span> save 錛屾彁浜ゅ悗鎻愮ず “no row with the given identifier exists”
4. 濡傛灉闇瑕佷嬌鐢?/span> extremeTable, 璁板緱鍦?/span> jsp 涓紩鐢?/span>
<%@ taglib uri="http://www.extremecomponents.org" prefix="ec" %>