Grails中要使用ajax技术,除了使用它提供的 remoteLink、formRemote和submitToRemote这几个由Grails提供的ajax功能外,也可以来点更直接的,下面就是例子:

在head部分,增加一行:
<g:javascript library="prototype" />
在文件中增加脚本函数的定义:
    <script type="text/javascript">
      function activetsc() {
          document.getElementById("idtsc").checked=true  //使得idtsc的选项被选择,这个与本主题无关。
      }
      function activedepart(obj,mypath) {            //第一个参数是调用的元素本身,第二个为路径
          document.getElementById("iddepart").checked=true   //使iddepart被选择
          var aass=mypath + '?checkdepart=' + obj.selectedIndex  //checkdepart是参数名这里只能传数值,中文还是有问题。
          new Ajax.Updater('iduser',aass,
               {asynchronous:true,evalScripts:true});   //调用 aass 的网址,更新iduser的内容(使用render就行)
          return false;
     }
    </script>

在网页中,使用onchange事件调用刚才定义的函数
    <select name="department" onchange="activedepart(this,'${createLink(action:/changedepart/)}')">
       ...
    </select>
在这里,将changedepart这个action用createLink函数转换为连接,一般形式是 /程序名/域名/action名 ,但如果使用 absolute 参数,调试没有问题,部署就会出错。
例如如果改成 createLink(action:/changedepart/,absolute:/true/),部署时竟然返回:
http://changeme/xxx/xxx/changdepart 。对出现changeme真是无语。

在changedepart action中,用render输出内容,替换原来iduser的元素,风格应尽量与iduser相同。在该action中,可以用params.checkdepart来读出参数内容,也就是那个obj.selectedIndex,但注意此时类型已变为字符串,要做转换才能当成数值。

posted @ 2011-09-01 22:26 家1阳 阅读(828) | 评论 (0) | 编辑 收藏
g5.User.listOrderByDepartment()*.department.unique()
这个语句可以做什么?g5是程序名,User是域名也就是数据库名,department是字段名,这个语句的意思是从User数据库取出所有数据并按department字段排序,单独取出的department这个字段(不要其他字段的数据)并消除重复项目。

按我的理解,Grails不论用list还是用findAll取出来的数据都是一数组列表(Arraylist),其中每一个元素就是一个数据库的记录,在该数组列表中,第一个是用下标0来访问,例如:
def aa=User.findAllByRole('管理员')
aa[0]表示第一个记录,如此类推。
这个*.表示对数组列表中的每一个元素进行点后面的操作,最前面这个例子.department(小写)表示取出department字段的内容,进行这个操作后得到一个新的列表,例子中得到User数据库中所有department的数据,后面的.unique()是对列表进行消除重复项目的操作,这个操作针对已经排好序的列表有作用,没排好序就没有用。
posted @ 2011-05-13 17:12 家1阳 阅读(1290) | 评论 (2) | 编辑 收藏

刚好工作中用到此功能,网上找了一下,有很多例子,但在我这都试验不成功,可能是我的RP问题。只好慢慢摸索,将人家的例子改成以下的样子,终于通过了:

首先在包(package)的开头增加输入语句:
import org.codehaus.groovy.grails.commons.ConfigurationHolder
不然后面response.setHeader等子程序将无法解析。其余的代码如下:

        response.setHeader("Content-disposition", "attachment; filename=bxmx-list.csv")
        response.contentType = "application/vnd.ms-excel"   //在这里设置charset多余,csv文件永远都只是ansi格式。

        render(text:"序号,姓名,日期,其他字段等\r\n",encoding:"GB2312") //这里encoding是关键,不然excel打开乱码,
                     // 奇怪的是,记事本打开永远都不乱码。

        def outp=Bxmx.findAll()  //这里可以查找数据,你可以用findAllBy等其他手段

        outp.each{
            render(text:it.xuhao+',')    //序号是数字,无需转码
            render(text:it.name+',',encoding:"GB2312") //姓名是由中文字符的,需要转码
            render(text:it.date.format('yyyy-MM-dd')+',') //日期无需转码
            ....... 
            render(text:'\r\n')
        }
        return false

题外话,这个日期格式的转换,我起初在Grails的文档找不到资料,后来才想起在Groovy的网站上找,找到文档后试验时又不小心用了'yy-mm-dd',怎么结果是乱的?可见我是完全不懂java,原来中间那个mm必须是大写。

posted @ 2011-04-23 11:06 家1阳 阅读(1430) | 评论 (4) | 编辑 收藏

天正8.2确实支持64位,但这里要的是天正32位以便与acad2006配合。首先在32位系统中安装天正,以便得到TGStart32.exe文件,也可以从这里的附件获取。启用W7的管理员账号,并以此账号登录,将UAC设置成“从不通知”,安装2006,将C:\Program Files (x86)\AutoCAD 2006文件夹的权限设置成Everyone拥有全部权限,尝试运行ACAD,如果不能运行就以管理员身份运行,出现兼容性警告忽略之。安装天正8.2,因为是64位的系统,天正目录里只有TGStart64.exe作为启动文件,将TGStart32.exe复制入同一目录,并使得桌面图标指向此文件。修改注册表,用记事本将下面文字存成.reg后缀的文件并合并到注册表中:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Tangent\TArch\8.0]
"Location"="C:\\Tangent\\TArch8"
"SetupLocation"=""

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Tangent\TArch\8.0\License]
"Mode"=dword:00000000
"Server"=""

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Tangent\TArch\8.0\InitFlag]
"InitStart18"=dword:00000000
"InitStart18.1"=dword:00000000

上面的Mode的值要根据实际情况作修改:0-试用版;1-单机锁;2-网络授权。
其实这些信息在安装天正时都设置在HKEY_LOCAL_MACHINE\SOFTWARE\Tangent\TArch\8.0 ,而现在我们使用TGStart32.exe,相应的注册信息得手工搬过来。运行天正,试用一下。正常后注销管理员账号重新登录到常用账号,停用管理员账号,将UAC恢复到默认值,把桌面的ACAD2006和天正8的图标设置成“以管理员身份运行此程序”(在“属性”、“兼容性”里面设置)。再测试运行一下。

不知道在哪里插入附件,只好存到dbank,下面是链接:
http://dl.dbank.com/c08wypiui9

posted @ 2011-03-02 16:06 家1阳 阅读(3915) | 评论 (2) | 编辑 收藏
单位要开发web程序,我对PHP、JAVA一点也不懂,临急抱佛脚上网找了一下,说Grails开发如何快速,云云。试用了一下,几分钟就利用scaffold (脚手架) 开发了一个程序,可惜出来的效果是全英文,数据库字段也不接受中文。网上跟汉化字段、改字段显示方面有关的文章、帖子没有,只好买了省科技书店唯一的一本Grails方面的书,但照书操作修改i18n里面的中文信息,没有效果,我感觉是我的版本跟书上介绍的版本不同所致,因为我用的是最新版1.3.7。好在书上有一条经验帮了我,它说可以生成scaffold 的所有代码来分析,我其实不懂Groovy语言,不过勉强编程还有点底,仔细分析之下看到如何利用i18n“汉化”scaffold生成的界面。

附:Grails版本:1.3.7
我用NetBeans6.9作为IDE的,NetBeans对Grails支持已经很不错了。NetBeans打开工程名称后,一般i18n的文件存放在“消息包”里面,找到并打开 messages_zh_CN.properties 文件,NetBeans自动会帮你处理一切unicode转码问题。将下面几行加入到该文件中,用于汉化scaffold的按钮与提示:

default.create.label=新建记录 {0}
default.edit.label=编辑 {0}
default.home.label=主页
default.list.label={0} 明细列表
default.new.label=新建 {0} 记录
default.show.label=显示 {0}
default.button.create.label=新建保存
default.button.delete.label=删除
default.button.delete.confirm.message=你确定要删除吗?
default.button.edit.label=编辑
default.button.update.label=更改
default.created.message=新建了
default.deleted.message=删除了
default.updated.message=更新了

紧接着还要对数据库字段的标题进行汉化,例如有一个数据库表叫Student,数据库的一张表在Grails里面叫Domain(域),表里面有姓名name、学号sid、性别gender等字段,那还要在该文件加入如下信息(注意student已经改为小写,这里要遵从Grails的大小写原则并且大小写敏感,特别是字段名,不能以大写开头):

student.label=学生信息
student.name.label=姓名
student.sid.label=学号
student.gender.label=性别

附:Student.groovy文件的原始内容,以便读者对照参考:
class Student {
    String  name  //姓名
    String  sid   //学号
    String  gender  //性别
   
    static constraints = {
    }
}

2011/2/25 更改:default.edit.label=编辑 改成 default.edit.label=编辑 {0} ,这个{0}显示的是数据库名,在这里是学生信息,英文就是student。
posted @ 2011-02-24 10:32 家1阳 阅读(1886) | 评论 (3) | 编辑 收藏
XP时代,当单位有几千台计算机时,按组织结构给它们分成几十个工作组,浏览网上邻居时,先浏览展开工作组,再浏览某工作组里面的计算机,这已经成为习惯了。但WINDOWS 7 的就不同了,它浏览网上邻居居然是自动搜索所有的计算机,而且不管什么工作组全部搜进来,由于我们这里计算机太多,找起来很不方便。虽然使用上帝模式 "网上邻居.{208D2C60-3AEA-1069-A2D7-08002B30309D}" 可以建立一个图标浏览本工作组的计算机,但其他工作组怎办呢?虽然直接在地址栏输入 \\计算机名 确实能找到该计算机,但也没有人记得住这么多机器名啊。

[转帖}在“网络”的界面中,右键点击空白的位置,在右键菜单中,将“分组依据”改为“工作组”,然后点击“查看”-〉“折叠所有组”。
posted @ 2011-02-23 08:41 家1阳 阅读(708) | 评论 (0) | 编辑 收藏
单位要搞VPN,dns的优先级成为问题。vpn有本身的dns,而公众网的DNS总是劫持了,一旦解析内部网机器就劫持到一个“找不到”页面。如何提升vpn的dns的优先级呢?在网上找了很久,终于找到答案,原来这个是网卡的优先级问题,多个网卡也有这种情况。在“网络连接”窗口,有个“高级”下拉菜单,里面有“高级设置”菜单项,在“高级设置”窗口,可以设置网卡的访问顺序。还可以设置服务、协议的绑定。
posted @ 2010-09-08 23:45 家1阳 阅读(607) | 评论 (0) | 编辑 收藏
XP中安装了IPV6后,不像Vista和7那样有一些默认的路由设置,结果是从Vista可以PING通XP,Xp不能PING通Vista。XP德route命令不支持IPV6,所以只能使用下面命令:
netsh interface ipv6 add route fe80::/64 "本地连接" metric=256
本人是小白,不当之处请指正。执行上面命令后可以PING通了。
posted @ 2009-12-07 12:36 家1阳 阅读(626) | 评论 (1) | 编辑 收藏
vs2002真的很难找,bt、电驴搜索、翻版光碟市场都找遍了,就是找不到。
用vs2003为acad2006开发的ARX,不能用appload加载,会显示加载失败,只能用ARX命令载入,但显示不兼容警告。有什么办法使acad认为这是vs2002开发的,从而成功加载呢?
网上找到了这篇文章
Peering Inside the PE: A Tour of the Win32 Portable Executable File Format
http://msdn.microsoft.com/en-us/library/ms809762.aspx
对我帮助很大。
用vs2003开发的ARX,dumpbin显示连接器(linker)的版本是7.10,而用vs2002开发的就显示7.00。下面就是7.10改7.00的方法:
打开命令提示符窗口,用dos命令 debug <arx文件名> ,把要改的arx文件装入到debug程序中,按d回车,debug一般把文件装入到0x0100起始的地址中(下面的数字如没有特殊指定一般都是十六进制)),d命令显示8行,也就是0100至017f,头两个字母肯定是“4D 5A”,也就是“MZ”,请注意013c-013f这4个字节,就是PE信息块地址,从我这个例子上看是0108,如图一所示。

这个0108还要加上debug的起始地址100就是0208才是真正的地址。键入debug命令D 0208,可以看到如图二的情景:

图二中,头两个字母一定要是PE,“50 45”,在距离0208地址0x14的地方有两个字节,表示PE文件头可选信息块的大小,其实所谓可选块已经是必有的啦。在我这个例子中是E0,其实只要不是0就行。在距离0208(PE信息头)0x18的地方,就是PE可选信息块的起始地址,那里必定是两个字节0b、01,是个标志,请注意,紧跟着就是连接器(Linker)的版本了,一共有两个字节,头字节是主版本号,第二个字节是次版本号,在我这里是0220行的第三、第四个数:07和0a。只要将0a改为00就行了。在我这里输入debug命令 E 223回车,系统提示0A,输入00回车。改好后输入debug命令w回车把文件保存。到2006中载入该arx程序,通过。当然只是不显示不兼容警告而已,要是程序真有不兼容的情况那还是会发生的。
posted @ 2009-07-20 17:50 家1阳 阅读(938) | 评论 (2) | 编辑 收藏
从网上找到最多的方法是:
ifconfig eth0 down
ifconfig eth0 hw ether 00:34:56:78:90:12
ifconfig eht0 up
其实,这个只能临时改变MAC地址,重起系统后又变回去。
ifconfig存放在sbin里,单独使用可以查看mac地址。

后来找到一法:在 /etc/rc.d/init.d 文件夹下的 network 文件中加入一行:
ifconfig eth0 hw ether 00:34:56:78:90:12
就可以永久地改变MAC地址。
posted @ 2009-06-24 17:20 家1阳 阅读(405) | 评论 (0) | 编辑 收藏
仅列出标题
共3页: 1 2 3 

导航

<2011年4月>
日一二三四五六
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

统计

常用链接

留言簿(2)

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜