- 浏览: 160637 次
- 性别:
- 来自: 杭州
文章列表
利用Ant生成客户端调用WebService,开发中比较常用
准备条件:
1. 创建工程xfire_client
2. 导入Xfire的所有JAR包,把lib外的xfire-all-1.2.6.jar加到lib中
步聚如下:
1. build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="WebService" basedir="." default="gen-webservice">
&l ...
以下的WEB工程虽然在实际应用中没有实际作用,但能很好的说明webservice的应用原理:
准备条件:
1. 创建一个工程Xfire
2. 导入Xfire的jar包,可到http://xfire.codehaus.org下载
步聚:
1. 写接口:Calculator.java
package com.test.service;
public interface Calculator {
public int add(int a,int b);
public int subtract(int a,int b);
public int multiply(int a, ...
1.需要导入struts2-spring-plugin-2.1.8.1.jar包
这个包是Struts与spring整合的必须的
3.看下asm.jar文件有没有重复的,有的话保留asm.jar,删除另外一个。
4.web.xml中找到如下并改正,Struts2的核心类是下面这个。
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter ...
最权威的资料也就是官网了,如果英文好的话可访问下如下URL
http://www.grails.org/GORM+-+Collection+Types
其实在grails中配置很简单
在一的一方需要增加SortedSet
static hasMany=[slms:LtSlm]
SortedSet slms
在多的一方需要实现Comparable
class LtSlm implements Comparable {
...
int compareTo(obj) {
slmId.compareTo(obj.slmId)
}
}
//获得表格中的存储
var slmStore=sla_form_slaSlmGrid.getStore()
//获得存储中的所有记录,当然有可以获得指定记录
var records=slmStore.getRange(0,slmStore.getTotalCount())
var slmIds="";
//遍历所有记录
for(var i=0;i<records.length;i++){
var record=records[i];
if(i>0){
slmIds=slmIds+"-"
} ...
//获得表格中被选中的记录条数
var records = sla_addslm_grid.getSelectionModel().getSelections();
//遍历记录数
for(var i=0;i<records.length;i++){
//取得每条记录的字段值
var slmId=records[i].get("slmId");
var slmTitle=records[i].get("slmTitle");
var slmAppObj=records[i].get("slmAp ...
近来遇到在ExtJS中表单提交时,像Ext.form.ComboBox组件不经过处理值是发送不到后台的,有一种补救的方法是把ComboBox中的name属性去掉,换成hiddenValue,我试过,可以传到后台,但有时会也会有BUG,如下方法,还是比较保险的。
var test=comboboxName.getValue();
用ComboBox组件变量名.getValue()。然后放到URL中传到后台。
但有时传到后台会出现乱码。
可用如下方法解决。
var url=encodeURI(url);
encodeURI是JS中的方法,用来处理乱码问题。
产品部署检查清单
1.确认grails-app/conf/DataSource.groovy中的数据库连接。
要是待部署应用服务器可以通过JNDI提供数据库连接,你可以把用户名,口令和URL各变量换成一个jndiName变量:
production{
dataSource{
jndiName="java:comp/env/jdbc/myDataSource"
}
}
2.检查grails-app/conf/BootStap.groovy中任何与产品有关的设置。
3.在grails-app/conf/Config.groovy中有一个enviro ...
在grails-app/conf/UrlMapping.groovy中可以改变映射
class UrlMappings {
static mappings = {
"/$controller/$action?/$id?"{
constraints {
// apply constraints here
}
}
"/"(controller:'race',action:'list')
"500"(view:'/error')
}
}
1.安装插件
命令行输入grails install-plugin 插件名
插件被下载到了你的主目录下的.grails目录。下一次在其他项目中安装searchable插件时,Grails会检查是否存在最新版本,若是没有,Grails就从.grails缓存中安装,而不是从互联网。
2.插件的内容可以在.grails/1.2.0/projects/工程名/plugins中找到
从与单个控制器打交道更进一步,把安全应用到所有控制器。要完成这一点,我们需要创建过滤器。
1.创建过器滤器
命令行输入grails create-filters Admin
2.会在grails-app/conf下生成AdminFilters.groovy
这个例子是把all过滤器更名为adminOnly,任何可能更新记录的调用都被限制为登录的管理员才能操作。
class AdminFilters {
def filters = {
adminOnly(controller:'*', action:'(create|edit|update|delete|save) ...
对于UserController进行控制,只允许管理员创建新用户
利用beforeInterceptor
如下:
class UserController {
def beforeInterceptor=[action:this.&auth,except:['login','logout','authenticate']]
def auth(){
if(!session.user){
redirect(cotroller:'user',action:'login')
return false
}
if(!session.user ...
大多数公共网站都在首部的右上角有一个不醒目的登录链接。下面是创建这个链接的方法:
1.命令行输入grails create-tag-lib Login
2.会在grails-app/taglib目录下生成LoginTagLib.groovy
编辑这个类
package racetrack
class LoginTagLib {
def loginControl={
if(request.getSession(false)&&session.user){
out<<"Hello ${session.user.login}"
...
编解码器(Codec)(编码器-解码器的缩写)是转换字符串的一种方法。Grails提供了大量便捷的编解码器,而且已经元编程到了所有字符串实例上。
例如:
"<p>Hello</p>".encodeAsHTML()返回<p>Hello</p>
"You&Me".encodeAsURL()返回You+%26+Me
"ABC123".encodeAsBase64()返回QUJDMTlz相应的还有decodeAsHTML()、decodeAsURL()、 ...
要想真正得到grails的内部工作零件,输入grails install-templates。这个命令会告诉grails为所有视图,控制器,领域类,标签类等能够定制的组件创建模板代码。检查src/templates,你可以了解所有这些文件的样板代码和细节。
可以对模板中的领域类进行修改:
src/templates/artifacts/DomainClass.groovy
@artifact.package@class @artifact.name@ {
static constraints = {
}
//所有的领域类都产生toString()方法
Str ...