<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>dellsoft</title>
    <description></description>
    <link>http://dellsoft.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>extjs StatusBar 所在panel 在 south</title>
        <author>dellsoft</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dellsoft.javaeye.com">dellsoft</a>&nbsp;
          链接：<a href="http://dellsoft.javaeye.com/blog/213848" style="color:red;">http://dellsoft.javaeye.com/blog/213848</a>&nbsp;
          发表时间: 2008年07月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在把StatusBar放到一个Panel上时，如果这个panel在ViewPort中的South ，需要把 Panel的height 设置成 0 否则在ie7中，会有一个13px的空白。<br /><br /><br /><pre name="code" class="java"> var statusBar = new Ext.Panel({
//            autoHeight: true,
          <strong>  height:0,</strong>
            //            title: 'StatusBar',
            region:'south',
            //            bodyStyle: 'padding:5px;',
            bbar: new Ext.StatusBar({

                id: 'southStatus',
                // defaults to use when the status is cleared:
                //                defaultText: 'Default status text',
                defaultIconCls: 'default-icon',
                // values to set initially:
                text: '',
                iconCls: 'ready-icon',

                // any standard Toolbar items:
                items: [{
                    text: '软件',
                    handler: function() {
                        window.location = 'http://www.xxx.com.cn';
                    }
                }, '-', {text:new Date().format('Y-m-d')},'-', clock]
            }),
            listeners:{
                'render':{
                    fn:function() {
                        Ext.TaskMgr.start({
                            run:function() {
                                Ext.fly(clock.getEl()).update(new Date().format('g:i:s A'));
                            },
                            interval: 1000
                        })
                    }
                }
            }
        });</pre>
          <br/>
          <span style="color:red;">
            <a href="http://dellsoft.javaeye.com/blog/213848#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 11 Jul 2008 11:37:54 +0800</pubDate>
        <link>http://dellsoft.javaeye.com/blog/213848</link>
        <guid>http://dellsoft.javaeye.com/blog/213848</guid>
      </item>
      <item>
        <title>grails 根据数据库自动生产 domains</title>
        <author>dellsoft</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dellsoft.javaeye.com">dellsoft</a>&nbsp;
          链接：<a href="http://dellsoft.javaeye.com/blog/211729" style="color:red;">http://dellsoft.javaeye.com/blog/211729</a>&nbsp;
          发表时间: 2008年07月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          GenerateDataabase.groovy<br /><pre name="code" class="java">
import java.lang.reflect.Method
import com.pansoft.extjs.DbunitDatabaseTemplateGenerator
import java.sql.Connection
import java.sql.DriverManager

/*
* Copyright 2004-2005 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

/**
 * Gant script that handles the creation of domain classes from an existing database
 *
 * @author dellsoft
 *
 * @since 1.0
 */

grailsAppName = ""

Ant.property(environment: "env")
grailsHome = Ant.antProject.properties."env.GRAILS_HOME"

includeTargets &lt;&lt; new File("${grailsHome}/scripts/Compile.groovy")

//pluginHome = new File("./plugins").listFiles().find {
//    it.name.startsWith('dbmapper-')
//}

target('default': "Generates code for all the domain classes in the database") {
    depends(promptForTableName,generateDomainClasses)
}

target(promptForTableName: "指定表名----") {
    if (!args) {
        Ant.input(addProperty: "artifact.name", message: "请输入表名:\nALL --代表所有")
        args = Ant.antProject.properties."artifact.name"
    }
}

target('generateDomainClasses': "Generate for all all the domain classes in the database") {
    profile("compiling config") {
        compile()
    }

    profile("creating config object") {
        ClassLoader contextLoader = Thread.currentThread().getContextClassLoader()
        classLoader = new URLClassLoader([classesDir.toURL()] as URL[], contextLoader)
        def configSlurper = new ConfigSlurper(grailsEnv)
        def configFile = new File("${basedir}/grails-app/conf/Config.groovy")
        if (configFile.exists()) {
            try {

                config = configSlurper.parse(classLoader.loadClass("Config"))
                config.setConfigFile(configFile.toURL())
            }
            catch (Exception e) {
                e.printStackTrace()

                event("StatusFinal", ["Failed to compile configuration file ${configFile}: ${e.message}"])
                exit(1)
            }

        }
        def dataSourceFile = new File("${basedir}/grails-app/conf/DataSource.groovy")
        if (dataSourceFile.exists()) {
            try {
                def dataSourceConfig = configSlurper.parse(classLoader.loadClass("DataSource"))
                config.merge(dataSourceConfig)
            }
            catch (Exception e) {
                e.printStackTrace()

                event("StatusFinal", ["Failed to compile data source file $dataSourceFile: ${e.message}"])
                exit(1)
            }
        }
        classLoader = contextLoader;
    }

    profile("generate the classes") {
        def username = config.dataSource.username
        def password = config.dataSource.password
        def databaseUrl = config.dataSource.url
        def driver = config.dataSource.driverClassName
        def sqlType
        def tableName = args
        if (driver.indexOf("sybase", 1) > 0) {
            sqlType = "sybase"
        } else if (driver.indexOf("mysql", 1) > 0) {
            sqlType = "mysql"
        } else if (driver.indexOf("oracle", 1) > 0) {
            sqlType = "oracle"
        } else if (driver.indexOf("hsql", 1) > 0) {
            sqlType = "hsql"
        }
        try {
            Class.forName(driver)

            Connection connection = DriverManager.getConnection(databaseUrl, username, password)
            connection.setAutoCommit true
            def generator = new DbunitDatabaseTemplateGenerator()
            println("tableName="+Arrays.asList(tableName).toString())
            println("tableName="+tableName)
            generator.generateDomainClasses(connection,sqlType,'','.',Arrays.asList(tableName))
            println("sqlType="+sqlType)

        } catch (Exception e) {
            e.printStackTrace()

            event("StatusFinal", ["Failed to generate domain classes: ${e.message}"])
            exit(1)
        }
        println("Successfully generated domain classes")
    }
}

</pre><br /><br />DbunitDatabaseTemplateGenerator.groovy<br /><br /><pre name="code" class="java">
package com.pansoft.extjs

import org.codehaus.groovy.grails.scaffolding.DefaultGrailsTemplateGenerator
import org.codehaus.groovy.grails.commons.GrailsDomainClass
import groovy.text.*;
import org.apache.commons.logging.Log;
import org.springframework.core.io.*
import org.apache.commons.logging.LogFactory;
import org.codehaus.groovy.grails.commons.GrailsDomainClass;
import org.codehaus.groovy.grails.commons.GrailsApplication;
import org.codehaus.groovy.grails.scaffolding.GrailsTemplateGenerator;
import org.codehaus.groovy.grails.commons.GrailsClassUtils as GCU
import org.codehaus.groovy.grails.commons.ApplicationHolder
import java.sql.Connection
import org.dbunit.database.IDatabaseConnection
import org.dbunit.ext.mssql.MsSqlConnection
import org.dbunit.dataset.IDataSet
import org.dbunit.ext.mysql.MySqlConnection
import org.dbunit.ext.oracle.OracleConnection
import org.dbunit.ext.hsqldb.HsqldbConnection
import org.dbunit.dataset.ITableMetaData
import org.dbunit.database.DatabaseConnection;
import org.dbunit.dataset.datatype.*
import java.sql.DatabaseMetaData
import java.sql.ResultSet;
/**
 * Created by IntelliJ IDEA.
 * User: dellsoft
 * Date: 2008-5-21
 * Time: 10:18:13
 * To change this template use File | Settings | File Templates.
 */
class DbunitDatabaseTemplateGenerator extends DefaultGrailsTemplateGenerator {
    static final Log Dbunitlog = LogFactory.getLog(DbunitDatabaseTemplateGenerator.class);

    public IDatabaseConnection conn
    public IDataSet dataSet
//    public String[] tables
    def tables = []
    public DatabaseMetaData databaseMetaData
    def indexColumns = []
    public ResultSet resultSet

    // 定义对应的数据类型
    def dataType = {column ->
//        def column = property
//        def cp = domainClass.constrainedProperties[property.name]

        if (!renderEditorTemplate) {
            // create template once for performance
            def templateText = getTemplateText("dataType.template")
            renderEditorTemplate = engine.createTemplate(templateText)
            Dbunitlog.info("templateText=" + templateText)
        }


        def binding = [column: column]
        Dbunitlog.info("binding=" + binding)
        return renderEditorTemplate.make(binding).toString()
    }

//    public DbunitDatabaseTemplateGenerator(Connection con,String sqlType) {
//
//
//
//    }

    // get the tables from the dataset
    public void generateDomainClasses(Connection conn, String sqlType, String pkg, String destDir, List tableName) {
        switch (sqlType) {
            case 'sybase': this.conn = new MsSqlConnection(conn, null)
                break
            case 'mysql': this.conn = new MySqlConnection(conn, null)
                break
            case 'oracle': this.conn = new OracleConnection(conn, null)
                break
            case 'hsql': this.conn = new HsqldbConnection(conn, null)
                break

        }

        dataSet = this.conn.createDataSet()
        tables = Arrays.asList(dataSet.getTableNames())
        def tableTmp = []
        if (tableName.size() > 0) {
            tableName.each {
                tableTmp &lt;&lt; it.toLowerCase()
            }
        }

        if (tableTmp.contains("all")) {

        } else {
            def tmp = [] 
            tmp = tables.findAll {
                tableTmp.contains(it.toLowerCase())
            }.asList()
            tables = tmp
        }

        databaseMetaData = this.conn.getConnection().getMetaData()
        tables.each {
            indexColumns.clear()
            resultSet = databaseMetaData.getIndexInfo(null, this.conn.schema, it, true, false)
//            resultSet = databaseMetaData.getBestRowIdentifier(null, this.conn.schema, it, DatabaseMetaData.bestRowSession, true)
            while (resultSet.next()) {
//                indexColumns['table'] = resultSet.getString(3)
//                indexColumns['unique'] = resultSet.getString(6)
//                indexColumns['type'] = resultSet.getString(7)
                if (resultSet.getString(9) != 'null' && !resultSet.getString(9).is(null)) {
                    indexColumns &lt;&lt; resultSet.getString(9)
                }

            }
            generateDomain(dataSet.getTableMetaData(it), pkg, destDir)
        }
        this.conn.close()
    }
    // generate domains from the tables
    public void generateDomain(ITableMetaData tableMetaData, String pkg, String destdir) {
        if (!destdir)
            throw new IllegalArgumentException("Argument [destdir] not specified")

        if (tableMetaData.tableName) {
            Dbunitlog.info("Domain generated at ${tableMetaData.tableName}")
            System.out.println("tableName=" + tableMetaData.tableName)
//            def fullName = domainClass.fullName
//            def pkg = ""
//            def pos = fullName.lastIndexOf('.')
//            if (pos != -1) {
//                // Package name with trailing '.'
//                pkg = fullName[0..pos]
//            }

            def destFile = new File("${destdir}/grails-app/domain/${tableMetaData.tableName[0] + tableMetaData.tableName[1..-1].toLowerCase()}.groovy")
            if (canWrite(destFile)) {
                destFile.parentFile.mkdirs()

                destFile.withWriter {w ->
                    generateDomain(tableMetaData, w)
                }

                Dbunitlog.info("Domain generated at ${destFile}")
            }
        }
    }

    public void generateDomain(ITableMetaData tableMetaData, Writer out) {
        def templateText = getTemplateText("Domain.groovy")

        def binding = [
                tableName: tableMetaData.tableName[0] + tableMetaData.tableName[1..-1].toLowerCase(),
                columns: tableMetaData.columns,
                primaryKeys: tableMetaData.primaryKeys,
                indexColumns: indexColumns,
                dataType: dataType,
                comparator: org.codehaus.groovy.grails.scaffolding.DomainClassPropertyComparator.class]

        def t = engine.createTemplate(templateText)
        t.make(binding).writeTo(out)
    }



    private canWrite(testFile) {
        if (!overwrite && testFile.exists()) {
            try {
                ant.input(message: "File ${testFile} already exists. Overwrite?", "y,n,a", addproperty: "overwrite.${testFile.name}")
                overwrite = (ant.antProject.properties."overwrite.${testFile.name}" == "a") ? true : overwrite
                return overwrite || ((ant.antProject.properties."overwrite.${testFile.name}" == "y") ? true : false)
            } catch (Exception e) {
                // failure to read from standard in means we're probably running from an automation tool like a build server
                return true
            }
        }
        return true
    }

    private getTemplateText(String template) {
        def application = ApplicationHolder.getApplication()
        // first check for presence of template in application
        if (resourceLoader && application?.warDeployed) {
            return resourceLoader.getResource("/WEB-INF/templates/scaffolding/${template}").inputStream.text
        }
        else {
            def templateFile = "${basedir}/src/templates/scaffolding/${template}"
            if (!new File(templateFile).exists()) {
                // template not found in application, use default template
                def ant = new AntBuilder()
                ant.property(environment: "env")
                def grailsHome = ant.antProject.properties."env.GRAILS_HOME"
                templateFile = "${grailsHome}/src/grails/templates/scaffolding/${template}"
            }
            return new File(templateFile).getText()
        }
    }


}
</pre><br /><br />domain.groovy 模板<br /><pre name="code" class="java">
&lt;% import org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventTriggeringInterceptor as Events %>
&lt;% import org.dbunit.dataset.datatype.* %>
class ${tableName} {
&lt;%
    def excludedColumns = ['id', 'version']
    //out put the column
    String omitPrefix = "F_"
    def outColumns = []
    def primaryFields = []
    def mappingFields = [:]
    def constraintsFields = [:]
    def idColumn = ["F_ID"]
    def isUseIdColumn = true
    def isUseVersionColumn = true
    outColumns = columns.findAll {!excludedColumns.contains(it.columnName)}
    outColumns.each {p ->
        def outName
        outName = getOmitPrefixColumn(p.columnName,omitPrefix)
        mappingFields[outName] = p.columnName
        constraintsFields[outName] = p.nullable
%>
    ${dataType(p)} ${outName}
&lt;%
    }
    primaryKeys.each {p ->
        primaryFields &lt;&lt; getOmitPrefixColumn(p.columnName,omitPrefix)
    }

    if (primaryFields.isEmpty()) {
        primaryFields = indexColumns
    }

    public String getOmitPrefixColumn(String orignalColumn,String omitPrefixString) {
        String  omitPrefixColumn
        if (orignalColumn.contains(omitPrefixString)){
            omitPrefixColumn = orignalColumn[omitPrefixString.length()..-1].toLowerCase()
        }else {
            omitPrefixColumn = orignalColumn.toLowerCase()
        }
        return   omitPrefixColumn
    }
    if (isUseIdColumn) {
        primaryFields = idColumn
    }


%>
    static mapping = {
       // table '${tableName}'
      &lt;% if ( !isUseVersionColumn ){ %>
        version false
       &lt;% } %>
      //  id composite: ['${primaryFields.join(', ')}']
&lt;%
    mappingFields.each {key,value ->
%>
        ${key} column: '${value}'
&lt;%
    }
%>                                                      
    }

    static constraints = {
&lt;%
    constraintsFields.each {column ->
    if ("${column.value}" == "noNulls") {
%>
        ${column.key} (nullable: false)
&lt;%
        }
    }
%>
    }
}
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://dellsoft.javaeye.com/blog/211729#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 Jul 2008 17:25:27 +0800</pubDate>
        <link>http://dellsoft.javaeye.com/blog/211729</link>
        <guid>http://dellsoft.javaeye.com/blog/211729</guid>
      </item>
      <item>
        <title>grails 导出 excel</title>
        <author>dellsoft</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dellsoft.javaeye.com">dellsoft</a>&nbsp;
          链接：<a href="http://dellsoft.javaeye.com/blog/211728" style="color:red;">http://dellsoft.javaeye.com/blog/211728</a>&nbsp;
          发表时间: 2008年07月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          用 poi 来导出 excel 文件<br /><br /><pre name="code" class="java">
import org.codehaus.groovy.grails.commons.*
import org.apache.poi.hssf.usermodel.HSSFWorkbook
import org.apache.poi.hssf.usermodel.HSSFSheet
import org.apache.poi.hssf.usermodel.HSSFRow
import org.apache.poi.hssf.usermodel.HSSFCell
import org.codehaus.groovy.grails.commons.GrailsDomainClass
import org.codehaus.groovy.grails.web.converters.ConverterUtil
import org.springframework.web.servlet.support.RequestContextUtils as RCU
import org.codehaus.groovy.grails.scaffolding.DomainClassPropertyComparator;
import org.springframework.context.MessageSource
import org.apache.poi.hssf.usermodel.HSSFCellStyle
import org.apache.poi.hssf.usermodel.HSSFFont
import org.apache.poi.hssf.util.HSSFColor;

class XlsExportService {

//    def messageSource
    MessageSource messageSource
    boolean transactional = true
//    def config = ConfigurationHolder.config
//    def domainName
    def xlsExport(out, request, domain, datas) {
        def excludedProps = ['id', 'version']
        def column = []
        def titles = []
        def outProperties
        def locale = RCU.getLocale(request)
//        def text
        def args
        def domainName = domain.toLowerCase()
        GrailsDomainClass domainClass = ConverterUtil.getDomainClass(domain)
        if (domainClass != null) {
            outProperties = domainClass.properties.findAll {!excludedProps.contains(it.name)}
        }
        Collections.sort(outProperties, new DomainClassPropertyComparator(domainClass))
        outProperties.each {
            column &lt;&lt; "${it.name}"
            def text = messageSource.getMessage(
                    "${domainName}.${it.name}".toString(),
                    args == null ? null : args.toArray(),
                    "${domainName}.${it.name}".toString(),
                    locale)
            titles &lt;&lt; text
        }
        HSSFWorkbook wb = new HSSFWorkbook();
        HSSFSheet sheet = wb.createSheet("new sheet");
        HSSFRow row
        HSSFCell cell
        HSSFCellStyle style = wb.createCellStyle()
        HSSFFont font   =   wb.createFont()
        font.setFontHeightInPoints((short)12)
        font.setFontName("宋体")
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD) 
        style.setFont(font)
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER)
        style.setFillBackgroundColor(HSSFColor.ORANGE.index)
//        style.setFillPattern(HSSFCellStyle.)
        // set the title
        row = sheet.createRow((short) 0);
        titles.eachWithIndex {title, i ->
            cell = row.createCell((short) (i));
            cell.setCellStyle(style)
            cell.setCellValue(title);
        }

        // set the data
        datas.eachWithIndex {data, i ->
            row = sheet.createRow((short) (i+1));
            column.eachWithIndex {p, j ->
                row.createCell((short) (j)).setCellValue(data."${p}");

            }

        }

        // Write the output to a file
        wb.write(out);
        out.close()

    }


}

</pre><br />在你的 domaincontroller 中加入<br /><br /><pre name="code" class="java">
 def exportXls = {
//        def excludedProps = ['id', 'version']
//        def column = []
//        def titles = []
//        def outProperties = []
//        GrailsDomainClass domainClass = ConverterUtil.getDomainClass("Person");
//        if (domainClass != null) {
//            domainClass.persistentProperties.each {p ->
//                outProperties &lt;&lt; p.name
//            };
//
//        }
//        outProperties.each {
//            column &lt;&lt; "${it}"
//            titles &lt;&lt; message(code: "person.${it}")
//        }
        response.setHeader("Content-disposition", "attachment; filename=person.xls")
        response.setContentType("application/vnd.ms-excel")
//        ServletOutputStream f = response.getOutputStream();
        xlsExportService.xlsExport(response.outputStream, request,"Person", Person.list())
//        render(contextType:"application/vnd.ms-excel")


    }
</pre><br /><br />这个好处就是导出的表头信息通过 properties来获取！
          <br/>
          <span style="color:red;">
            <a href="http://dellsoft.javaeye.com/blog/211728#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 Jul 2008 17:21:36 +0800</pubDate>
        <link>http://dellsoft.javaeye.com/blog/211728</link>
        <guid>http://dellsoft.javaeye.com/blog/211728</guid>
      </item>
      <item>
        <title>grails war 包定制</title>
        <author>dellsoft</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dellsoft.javaeye.com">dellsoft</a>&nbsp;
          链接：<a href="http://dellsoft.javaeye.com/blog/211726" style="color:red;">http://dellsoft.javaeye.com/blog/211726</a>&nbsp;
          发表时间: 2008年07月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在config.groovy 下面配置<br /><br />grails.war.resources = {stagingDir -><br />    copy(todir: "${stagingDir}/WEB-INF/classes/grails-app/yourDir") {<br />        fileset(dir:"grails-app/YourDir")<br />    }<br />}
          <br/>
          <span style="color:red;">
            <a href="http://dellsoft.javaeye.com/blog/211726#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 Jul 2008 17:18:04 +0800</pubDate>
        <link>http://dellsoft.javaeye.com/blog/211726</link>
        <guid>http://dellsoft.javaeye.com/blog/211726</guid>
      </item>
      <item>
        <title>grails datasource 中配置数据源用户名称和密码 加密</title>
        <author>dellsoft</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dellsoft.javaeye.com">dellsoft</a>&nbsp;
          链接：<a href="http://dellsoft.javaeye.com/blog/211724" style="color:red;">http://dellsoft.javaeye.com/blog/211724</a>&nbsp;
          发表时间: 2008年07月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在datasource.groovy<br />password = YourClass.decode(加密后的密码)<br /><br />提前用YourClass.encode(原始密码)获得加密后的密码
          <br/>
          <span style="color:red;">
            <a href="http://dellsoft.javaeye.com/blog/211724#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 Jul 2008 17:16:41 +0800</pubDate>
        <link>http://dellsoft.javaeye.com/blog/211724</link>
        <guid>http://dellsoft.javaeye.com/blog/211724</guid>
      </item>
      <item>
        <title>grails  自定义 validator</title>
        <author>dellsoft</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dellsoft.javaeye.com">dellsoft</a>&nbsp;
          链接：<a href="http://dellsoft.javaeye.com/blog/211702" style="color:red;">http://dellsoft.javaeye.com/blog/211702</a>&nbsp;
          发表时间: 2008年07月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="http://www.zorched.net/2008/01/25/build-a-custom-validator-in-grails-with-a-plugin/" target="_blank">http://www.zorched.net/2008/01/25/build-a-custom-validator-in-grails-with-a-plugin/</a>
          <br/>
          <span style="color:red;">
            <a href="http://dellsoft.javaeye.com/blog/211702#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 Jul 2008 17:05:13 +0800</pubDate>
        <link>http://dellsoft.javaeye.com/blog/211702</link>
        <guid>http://dellsoft.javaeye.com/blog/211702</guid>
      </item>
      <item>
        <title>grails script 用 gorm 相关特性</title>
        <author>dellsoft</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dellsoft.javaeye.com">dellsoft</a>&nbsp;
          链接：<a href="http://dellsoft.javaeye.com/blog/211680" style="color:red;">http://dellsoft.javaeye.com/blog/211680</a>&nbsp;
          发表时间: 2008年07月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          原文<br />http://amorproximi.blogspot.com/2008/07/grails-bootstrapping.html<br />择录部分，<br /><br />Ant.property(environment: "env")<br />grailsHome = Ant.antProject.properties."env.GRAILS_HOME"<br /><br />includeTargets &lt;&lt; new File("${grailsHome}/scripts/Bootstrap.groovy")<br /><br /><br />target('default': "Working edition") {<br />    //we need one arg, the script to run.  Follow a convention here, the arguement is the name of the <br />    //script to run minus the file suffix and 'Script' naming convention.  For example, running:<br />    //>grails ScriptRunner Merge<br />    //will run $PROJECT_ROOT/test/local/MergeScript.groovy with the fully bootstrapped environment<br />    if (!args) {<br />        throw new RuntimeException("[fail] This script requires an argument to the script to run.")<br />    }<br />    //copy and paste from $GRAILS_HOME/scripts/Shell.groovy<br />    depends(configureProxy, packageApp, classpath)<br />    classLoader = new URLClassLoader([classesDir.toURI().toURL()] as URL[], rootLoader)<br />    Thread.currentThread().setContextClassLoader(classLoader)<br />    loadApp()<br />    configureApp()<br />    new GroovyScriptEngine(Ant.antProject.properties."base.dir", classLoader).run("test/local/${args}Script.groovy",<br />            null)<br />}
          <br/>
          <span style="color:red;">
            <a href="http://dellsoft.javaeye.com/blog/211680#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 Jul 2008 16:55:28 +0800</pubDate>
        <link>http://dellsoft.javaeye.com/blog/211680</link>
        <guid>http://dellsoft.javaeye.com/blog/211680</guid>
      </item>
      <item>
        <title>grails services transaction</title>
        <author>dellsoft</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dellsoft.javaeye.com">dellsoft</a>&nbsp;
          链接：<a href="http://dellsoft.javaeye.com/blog/210637" style="color:red;">http://dellsoft.javaeye.com/blog/210637</a>&nbsp;
          发表时间: 2008年07月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在 graisl 应用中，默认情况下，services 的事务是系统自动控制的，默认下 是true<br />可以通过以下几种方法改变transaction的状态<br />1） 通过sessonFactory<br />def session = sessionFactory.getCurrentSession()<br /><br />Transaction tx = session.beginTransaction()<br /><br />&lt;><br /><br />tx.commit()<br />or<br />tx.rollback()<br />2）withTransaction  grails 文档中介绍的<br />def transferFunds = {<br />	Account.withTransaction { status -><br />		def source = Account.get(params.from)<br />		def dest = Account.get(params.to)<br /><br />def amount = params.amount.toInteger() if(source.active) { source.balance -= amount if(dest.active) { dest.amount += amount } else { status.setRollbackOnly() } }<br /><br />}<br /><br />}
          <br/>
          <span style="color:red;">
            <a href="http://dellsoft.javaeye.com/blog/210637#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 02 Jul 2008 15:26:26 +0800</pubDate>
        <link>http://dellsoft.javaeye.com/blog/210637</link>
        <guid>http://dellsoft.javaeye.com/blog/210637</guid>
      </item>
      <item>
        <title>jsecurity 资料</title>
        <author>dellsoft</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dellsoft.javaeye.com">dellsoft</a>&nbsp;
          链接：<a href="http://dellsoft.javaeye.com/blog/205028" style="color:red;">http://dellsoft.javaeye.com/blog/205028</a>&nbsp;
          发表时间: 2008年06月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天看到一个好消息就是 jsecuirty，将要变成apache的一个工程了。<br />这将推动jsecurity的广泛应用，结束目前不温不火的局面。<br /><br />http://www.jsecurity.org/node/1049
          <br/>
          <span style="color:red;">
            <a href="http://dellsoft.javaeye.com/blog/205028#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 18 Jun 2008 10:22:05 +0800</pubDate>
        <link>http://dellsoft.javaeye.com/blog/205028</link>
        <guid>http://dellsoft.javaeye.com/blog/205028</guid>
      </item>
      <item>
        <title>jsecurity 资料</title>
        <author>dellsoft</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dellsoft.javaeye.com">dellsoft</a>&nbsp;
          链接：<a href="http://dellsoft.javaeye.com/blog/188039" style="color:red;">http://dellsoft.javaeye.com/blog/188039</a>&nbsp;
          发表时间: 2008年04月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          jsecurity 介绍 <br />比acegi 更简单的控件
          <br/>
          <span style="color:red;">
            <a href="http://dellsoft.javaeye.com/blog/188039#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 29 Apr 2008 14:19:56 +0800</pubDate>
        <link>http://dellsoft.javaeye.com/blog/188039</link>
        <guid>http://dellsoft.javaeye.com/blog/188039</guid>
      </item>
      <item>
        <title>grails ext 模板</title>
        <author>dellsoft</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dellsoft.javaeye.com">dellsoft</a>&nbsp;
          链接：<a href="http://dellsoft.javaeye.com/blog/182387" style="color:red;">http://dellsoft.javaeye.com/blog/182387</a>&nbsp;
          发表时间: 2008年04月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最新的extjs 模板出来了，大家可以到 grails 的plugin中下载。<br /><br /><strong>当前版本还没有发布，自己可以svn source 后release-plugin，从本地安装！</strong><br /><br />根据论坛的反馈，基于extjs的插件可能不至一个，现在的这个是基于extjs 纯javascript的。<br />grails-ext-ui可能会继续保持独立发展，不过，这个插件的核心开发人员现在好像停止了开发。（好像是由于工作特别忙）
          <br/>
          <span style="color:red;">
            <a href="http://dellsoft.javaeye.com/blog/182387#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 13 Apr 2008 21:46:15 +0800</pubDate>
        <link>http://dellsoft.javaeye.com/blog/182387</link>
        <guid>http://dellsoft.javaeye.com/blog/182387</guid>
      </item>
      <item>
        <title>create builder with groovy</title>
        <author>dellsoft</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dellsoft.javaeye.com">dellsoft</a>&nbsp;
          链接：<a href="http://dellsoft.javaeye.com/blog/169301" style="color:red;">http://dellsoft.javaeye.com/blog/169301</a>&nbsp;
          发表时间: 2008年03月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="http://vladimirvivien.com/blogs/ot/2008/02/creating-simple-builder-with-groovys.html" target="_blank">http://vladimirvivien.com/blogs/ot/2008/02/creating-simple-builder-with-groovys.html</a>
          <br/>
          <span style="color:red;">
            <a href="http://dellsoft.javaeye.com/blog/169301#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 08 Mar 2008 11:01:45 +0800</pubDate>
        <link>http://dellsoft.javaeye.com/blog/169301</link>
        <guid>http://dellsoft.javaeye.com/blog/169301</guid>
      </item>
      <item>
        <title>Grails1.1版本规划</title>
        <author>dellsoft</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dellsoft.javaeye.com">dellsoft</a>&nbsp;
          链接：<a href="http://dellsoft.javaeye.com/blog/169287" style="color:red;">http://dellsoft.javaeye.com/blog/169287</a>&nbsp;
          发表时间: 2008年03月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>原文链接</p><p><a href="http://docs.codehaus.org/display/GRAILS/Roadmap" target="_blank">http://docs.codehaus.org/display/GRAILS/Roadmap</a></p><p>1.1 发行计划</p><p>标题特点<br /> <br />1 。 jpa支持<br />2 。 JSP标签库的支持<br />3 。数据库 Migrations（可能基于Liquibase 或者 GSQL DSL）</p><p> 4 。 portlet的支持&nbsp; </p><p>5 。 Java的内容存储（JCR）的支持&nbsp;&nbsp;</p><p> 6 。安全API</p><p> 7。邮件支持</p><p> 8 。Maven2支持<br />9 。连续测试<br /> <br />核心提高<br /> <br />要实现上述特性，需要对Core进行一些重构，hence are dependant on certain improvements mainly to the plug-in system<br />&nbsp;&nbsp;&nbsp;&nbsp; * 独立的 gorm <br />&nbsp;&nbsp;&nbsp;&nbsp; *独立的&nbsp; GSP</p><p> &nbsp; &nbsp;&nbsp; *独立的 beanbuilder （已是可能的，但提供componentcontextloader ） <br /> 其他的还有 支持全局插件，提高插件的测试，卸载插件的命令等等，总之是很值得期待！ </p>
          <br/>
          <span style="color:red;">
            <a href="http://dellsoft.javaeye.com/blog/169287#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 08 Mar 2008 09:26:17 +0800</pubDate>
        <link>http://dellsoft.javaeye.com/blog/169287</link>
        <guid>http://dellsoft.javaeye.com/blog/169287</guid>
      </item>
      <item>
        <title>extjs 未来规划版本</title>
        <author>dellsoft</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dellsoft.javaeye.com">dellsoft</a>&nbsp;
          链接：<a href="http://dellsoft.javaeye.com/blog/163670" style="color:red;">http://dellsoft.javaeye.com/blog/163670</a>&nbsp;
          发表时间: 2008年02月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Ext Road Map<br /><br />Our goals for 2008 are to continue improving the 2.x version line by adding new components and enhancing some of the existing areas of functionality in Ext as shown below. Looking ahead to 3.0, there are some big new areas that we'll be getting into. In addition to some often requested features (charting, Comet) our major area of focus will be adding sophisticated server integration for Ext components. In addition to plugins and examples tying into existing server frameworks, we'll also be introducing our own integrated transport mechanism that will allow binding and marshaling of data transparently between Ext components and your back end of choice.<br /><br />Note that the list below is subject to change, and is not meant to outline every specific feature we have planned. It is intended to provide a high-level map of where Ext is headed over the next 12 months or so. There will be additional maintenance releases as needed as well.<br />2.1 (March 2008)<br /><br />    * Full REST support<br />    * Remote component loading samples<br />    * First class support for non-Ajax form submits<br />    * Upgrade all adapter libraries to current versions<br />    * Additional support for AIR platform<br />    * Grid filtering<br />    * CheckBox/Radio group<br />    * MultiSelect<br />    * StatusBar<br /><br />2.2 (Summer 2008)<br /><br />    * Ext.Ajax enhancements<br />    * Support for reset styles scoped to Ext components only<br />    * Expand TreeLoader data loading with additional samples, including XML<br />    * Browser history support<br />    * Slider component<br />    * FileUpload field<br /><br />3.0 (Fall/Winter 2008)<br /><br />    * Update the Ext event registration model<br />    * Flash Charting API<br />    * Comet/Bayeux support<br />    * Integrated client-server data binding/marshaling for Ext components<br />    * Samples demonstrating third-party RPC (e.g., DWR)<br />    * Section 508 accessibility improvements
          <br/>
          <span style="color:red;">
            <a href="http://dellsoft.javaeye.com/blog/163670#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 20 Feb 2008 16:48:14 +0800</pubDate>
        <link>http://dellsoft.javaeye.com/blog/163670</link>
        <guid>http://dellsoft.javaeye.com/blog/163670</guid>
      </item>
      <item>
        <title>grails flex 例子</title>
        <author>dellsoft</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dellsoft.javaeye.com">dellsoft</a>&nbsp;
          链接：<a href="http://dellsoft.javaeye.com/blog/161815" style="color:red;">http://dellsoft.javaeye.com/blog/161815</a>&nbsp;
          发表时间: 2008年02月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          一个结合 flex-plugin 的例子展示<br /><br />具体操作步骤<br />1）安装 flex plugin<br /><br />2）创建一个domian Product  和service<br /><pre name="code" class="java">
class Product {
    String name
    String description
    String image
    String category
    Double price
    Integer qtyInStock
}

</pre><br /><br /><br /><pre name="code" class="java">
class ProductService {

    static expose = ['flex-remoting']

    def getProducts() {
        return Product.list();
    }

    def update(Product product) {
        def p = Product.get(product.id)
        if (product) {
            p.properties = product.properties
            p.save()


        }
    }
   

}

</pre><br />3）在web-app目录下，新建下面3个文件<br />main.mxml<br /><pre name="code" class="xml">&lt;?xml version="1.0" encoding="utf-8"?>
&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*" layout="horizontal"
	creationComplete="srv.getProducts()">
	
	&lt;mx:RemoteObject id="srv" destination="productService"/>
	
	&lt;mx:Panel title="Catalog" width="100%" height="100%">
		&lt;mx:DataGrid id="list" dataProvider="{srv.getProducts.lastResult}" width="100%" height="100%"/> 
	&lt;/mx:Panel>
	
	&lt;ProductForm product="{Product(list.selectedItem)}"/>
	
&lt;/mx:Application></pre><br /><br />ProductForm <br /><pre name="code" class="xml">
&lt;?xml version="1.0" encoding="utf-8"?>
&lt;mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*"
	title="Details" width="100%" height="100%">
	
	&lt;Product id="product"
		name="{productName.text}"
		category="{category.text}"
		price="{Number(price.text)}"
		image="{image.text}"
		description="{description.text}"/>

	&lt;mx:RemoteObject id="srv" destination="productService"/>

	&lt;mx:Form width="100%">
	
		&lt;mx:FormItem label="姓名">
			&lt;mx:TextInput id="productName" text="{product.name}"/>
		&lt;/mx:FormItem>
	
		&lt;mx:FormItem label="Category">
			&lt;mx:TextInput id="category" text="{product.category}"/>
		&lt;/mx:FormItem>
		
		&lt;mx:FormItem label="Image">
			&lt;mx:TextInput id="image" text="{product.image}"/>
		&lt;/mx:FormItem>
		
		&lt;mx:FormItem label="Price">
			&lt;mx:TextInput id="price" text="{product.price}"/>
		&lt;/mx:FormItem>


        &lt;mx:FormItem label="Description" width="100%">
			&lt;mx:TextArea id="description" text="{product.description}" width="100%" height="100"/>
		&lt;/mx:FormItem>
		
	&lt;/mx:Form>

	&lt;mx:ControlBar>
		&lt;mx:Button label="更新" click="srv.update(product);"/>
	
	&lt;/mx:ControlBar>

&lt;/mx:Panel>
</pre><br /><br />Product.as<br /><pre name="code" class="java">
package
{
	[Bindable]
	[RemoteClass(alias="Product")]
	public class Product
	{
		public function Product()
		{
		}

		public var id:int;

		public var name:String;

		public var description:String;

		public var image:String;

		public var category:String;

		public var price:Number;

		public var qtyInStock:int;

	}
}

</pre><br /><br />4）直接运行程序<br />如下图
          <br/>
          <span style="color:red;">
            <a href="http://dellsoft.javaeye.com/blog/161815#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 10 Feb 2008 17:53:54 +0800</pubDate>
        <link>http://dellsoft.javaeye.com/blog/161815</link>
        <guid>http://dellsoft.javaeye.com/blog/161815</guid>
      </item>
      <item>
        <title>grails ext-ui 最新版本也放到 svn 中了</title>
        <author>dellsoft</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dellsoft.javaeye.com">dellsoft</a>&nbsp;
          链接：<a href="http://dellsoft.javaeye.com/blog/160551" style="color:red;">http://dellsoft.javaeye.com/blog/160551</a>&nbsp;
          发表时间: 2008年01月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          grails ext-ui 最新版本也放到 svn 中了<br /><br />在dev-app下，不过，还没有完成，有兴趣的可以下载下来看看
          <br/>
          <span style="color:red;">
            <a href="http://dellsoft.javaeye.com/blog/160551#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 30 Jan 2008 16:38:01 +0800</pubDate>
        <link>http://dellsoft.javaeye.com/blog/160551</link>
        <guid>http://dellsoft.javaeye.com/blog/160551</guid>
      </item>
      <item>
        <title>jsecurity plugin 更新了</title>
        <author>dellsoft</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dellsoft.javaeye.com">dellsoft</a>&nbsp;
          链接：<a href="http://dellsoft.javaeye.com/blog/160548" style="color:red;">http://dellsoft.javaeye.com/blog/160548</a>&nbsp;
          发表时间: 2008年01月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          grails 的jescurity plugin 更新了，用到了基本上是 1.0版本的jsecurity<br /><br />新特点就是，不用必须在domain 中加入 accessControll 了，可以直接在自己的filter中加入<br />accessCotroll了<br /><br />具体参考 mail lis 中<br />的<br />http://www.nabble.com/JSecurity%3A-living-on-the-edge-td15129218.html#a15137551
          <br/>
          <span style="color:red;">
            <a href="http://dellsoft.javaeye.com/blog/160548#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 30 Jan 2008 16:36:40 +0800</pubDate>
        <link>http://dellsoft.javaeye.com/blog/160548</link>
        <guid>http://dellsoft.javaeye.com/blog/160548</guid>
      </item>
      <item>
        <title>grails 文档 chm</title>
        <author>dellsoft</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dellsoft.javaeye.com">dellsoft</a>&nbsp;
          链接：<a href="http://dellsoft.javaeye.com/blog/160546" style="color:red;">http://dellsoft.javaeye.com/blog/160546</a>&nbsp;
          发表时间: 2008年01月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          从 grails 的mail list 中下载的<br />放到这里供大家下载<br /><br />还有<br />一个 groovy 的DSL 介绍 ppt<br />一个可以grails generate-domain-class a b c <br />的java工具文档<br />都是从mail list 中下载的
          <br/>
          <span style="color:red;">
            <a href="http://dellsoft.javaeye.com/blog/160546#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 30 Jan 2008 16:33:30 +0800</pubDate>
        <link>http://dellsoft.javaeye.com/blog/160546</link>
        <guid>http://dellsoft.javaeye.com/blog/160546</guid>
      </item>
      <item>
        <title>ext 标签库</title>
        <author>dellsoft</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dellsoft.javaeye.com">dellsoft</a>&nbsp;
          链接：<a href="http://dellsoft.javaeye.com/blog/158235" style="color:red;">http://dellsoft.javaeye.com/blog/158235</a>&nbsp;
          发表时间: 2008年01月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          extjs 的java tag 出来了<br />http://code.google.com/p/exttld/
          <br/>
          <span style="color:red;">
            <a href="http://dellsoft.javaeye.com/blog/158235#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 22 Jan 2008 10:23:00 +0800</pubDate>
        <link>http://dellsoft.javaeye.com/blog/158235</link>
        <guid>http://dellsoft.javaeye.com/blog/158235</guid>
      </item>
      <item>
        <title>jetgroovy 1.1 预览版本出来了</title>
        <author>dellsoft</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dellsoft.javaeye.com">dellsoft</a>&nbsp;
          链接：<a href="http://dellsoft.javaeye.com/blog/158078" style="color:red;">http://dellsoft.javaeye.com/blog/158078</a>&nbsp;
          发表时间: 2008年01月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          前提条件到http://download.jetbrains.com/idea/idea7656.exe下载 7656版本的idea<br /><br />原文<br />Hello All,<br />a preview of the new version of JetGroovy plugin is available at http://www.jetbrains.net/confluence/display/GRVY/JetGroovy+1.1+EAP<br /><br />A summary of new features:<br /><br />-Improved resolve and completion in GSP: now JetGroovy knows about implicit variables like params, application and such.（Gsp开始认知隐含变量 如果 params，application 等等）<br />-Javascript editing is supported in GSP (dependant on JavaScript plugin availability)（可以在GSP中编辑js了）<br />-Grails facet is detected automatically, for example when importing an exisiting grails application.（grails 自动识别到导入一个存在的grails应用，在先前的版本中，如果导入Eclipse的工程，不能认识这是一个grails程序，所以，右键中没有 Create Domain等）<br />-Annotations PSI is implemented, as a result JUnit4/TestNG tests can be run from IDEA<br />-Property files support is extended to understand references from groovy files（属性文件支持）<br />-Extract method refactoring<br />-Inline method refactoring<br />-Inspection to flag unused assignment<br />-Inspection to flag possibly uninitialized variable access<br />-Rename now correctly insert parameter declaration for renaming closure's implicit 'it' parameter<br />-Surround with closure now preserves code semantics inserting 'owner' qualification when needed
          <br/>
          <span style="color:red;">
            <a href="http://dellsoft.javaeye.com/blog/158078#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 21 Jan 2008 16:23:35 +0800</pubDate>
        <link>http://dellsoft.javaeye.com/blog/158078</link>
        <guid>http://dellsoft.javaeye.com/blog/158078</guid>
      </item>
      <item>
        <title>grails extjs ui</title>
        <author>dellsoft</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dellsoft.javaeye.com">dellsoft</a>&nbsp;
          链接：<a href="http://dellsoft.javaeye.com/blog/153864" style="color:red;">http://dellsoft.javaeye.com/blog/153864</a>&nbsp;
          发表时间: 2008年01月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="http://docs.codehaus.org/display/GRAILS/ExtUI+DSL" target="_blank">http://docs.codehaus.org/display/GRAILS/ExtUI+DSL</a><br /><br />希望可以早点出来，就好了
          <br/>
          <span style="color:red;">
            <a href="http://dellsoft.javaeye.com/blog/153864#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 08 Jan 2008 10:23:42 +0800</pubDate>
        <link>http://dellsoft.javaeye.com/blog/153864</link>
        <guid>http://dellsoft.javaeye.com/blog/153864</guid>
      </item>
      <item>
        <title>groovy 新书</title>
        <author>dellsoft</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dellsoft.javaeye.com">dellsoft</a>&nbsp;
          链接：<a href="http://dellsoft.javaeye.com/blog/153528" style="color:red;">http://dellsoft.javaeye.com/blog/153528</a>&nbsp;
          发表时间: 2008年01月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          groovy 新书将要发布
          <br/>
          <span style="color:red;">
            <a href="http://dellsoft.javaeye.com/blog/153528#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 06 Jan 2008 22:10:58 +0800</pubDate>
        <link>http://dellsoft.javaeye.com/blog/153528</link>
        <guid>http://dellsoft.javaeye.com/blog/153528</guid>
      </item>
      <item>
        <title>grails cms gocms</title>
        <author>dellsoft</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dellsoft.javaeye.com">dellsoft</a>&nbsp;
          链接：<a href="http://dellsoft.javaeye.com/blog/152183" style="color:red;">http://dellsoft.javaeye.com/blog/152183</a>&nbsp;
          发表时间: 2008年01月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          基于grails 的cms goCms就要出来了<br />详见<br />http://www.nabble.com/groovy.org.es-v3-td14566115.html
          <br/>
          <span style="color:red;">
            <a href="http://dellsoft.javaeye.com/blog/152183#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 01 Jan 2008 20:40:07 +0800</pubDate>
        <link>http://dellsoft.javaeye.com/blog/152183</link>
        <guid>http://dellsoft.javaeye.com/blog/152183</guid>
      </item>
      <item>
        <title>grail 的插件 jsecurity 更新了</title>
        <author>dellsoft</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dellsoft.javaeye.com">dellsoft</a>&nbsp;
          链接：<a href="http://dellsoft.javaeye.com/blog/152182" style="color:red;">http://dellsoft.javaeye.com/blog/152182</a>&nbsp;
          发表时间: 2008年01月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          grails的安全插件Jsecurity 更新了，使用了grails的filter功能！<br />
详见<br />
<a href="http://www.nabble.com/Intermediate-JSecurity-plugin-release-td14549219.html" target="_blank">http://www.nabble.com/Intermediate-JSecurity-plugin-release-td14549219.html</a>
<p>
&nbsp;
</p>

          <br/>
          <span style="color:red;">
            <a href="http://dellsoft.javaeye.com/blog/152182#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 01 Jan 2008 20:36:00 +0800</pubDate>
        <link>http://dellsoft.javaeye.com/blog/152182</link>
        <guid>http://dellsoft.javaeye.com/blog/152182</guid>
      </item>
      <item>
        <title>grails 文档出来了</title>
        <author>dellsoft</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dellsoft.javaeye.com">dellsoft</a>&nbsp;
          链接：<a href="http://dellsoft.javaeye.com/blog/140028" style="color:red;">http://dellsoft.javaeye.com/blog/140028</a>&nbsp;
          发表时间: 2007年11月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="http://grails.org/doc/RC1/" target="_blank">http://grails.org/doc/RC1/</a><br />
grails的文档出来了，在svn中也有源文件，不知道有人有兴趣翻译吗<br />
<br />
有兴趣的话，大家可以一起翻译
          <br/>
          <span style="color:red;">
            <a href="http://dellsoft.javaeye.com/blog/140028#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 12 Nov 2007 20:57:19 +0800</pubDate>
        <link>http://dellsoft.javaeye.com/blog/140028</link>
        <guid>http://dellsoft.javaeye.com/blog/140028</guid>
      </item>
  </channel>
</rss>