1. grails excel-export 如何从页面导出excel
用 poi 来导出 excel 文件
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 << "${it.name}"
def text = messageSource.getMessage(
"${domainName}.${it.name}".toString(),
args == null ? null : args.toArray(),
"${domainName}.${it.name}".toString(),
locale)
titles << 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()
}
}
在你的 domaincontroller 中加入
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 << p.name
// };
//
// }
// outProperties.each {
// column << "${it}"
// titles << 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")
}
这个好处就是导出的表头信息通过 properties来获取!
2. Grails domain的查询方法createCriteria,如果让结果集按两个或两个以上的字段排序呢
def c = Account.createCriteria()
def results = c.list {
like("holderFirstName", "Fred%")
and {
between("balance", 500, 1000)
eq("branch", "London")
}
maxResults(10)
order("holderLastName", "desc")
order("balance", "desc")
}
3. grails 是干什么的 请详细说明!
Grails是一套用于快速Web应用开发的开源框架,它基于Groovy编程语言,并构建于Spring、Hibernate和其它标准Java框架之上,从而为大家带来一套能实现超高生产力的一站式框架。
Ruby on Rails开创了将一门强大的编程语言和一个坚持己见、提倡用通情达理的默认设置代替复杂配置的框架进行创造性结合的先河。然而,还有许多组织并没有做好从Java的安全保护伞下走出的准备,也没有打算放弃他们目前在Java上的投入。而Grails的出现,使得在一个以Java为中心的环境中实现同等生产力的想法成为可能。
Grails的插件系统
grails的插件系统也是其亮点之一。首先,和rails,django等web框架类似,基于微内核的思想,插件(可重用模块)是框架的一等公民。grails除了核心模块以外的功能几乎都是通过插件方式实现的。实际上,一个grails插件和一个grails应用基本是完全一样的,同样可以使用grails run-app命令来运行。区别仅在于一个插件的根目录下需要提供一个fooplugin.groovy文件,提供插件的一些描述信息。
grails插件基本可以做任何事情,grails社区已经提供了各式各样的插件,发布在grails官方插件源上。查看现有的官方插件,可以执行下面的命令:
grails list-plugins
安装插件可以执行以下命令:
grails install-plugin 插件名或插件路径
Hello World示例
是时一个被用烂了而又经典的例子,在创建应用程序之前,先熟悉一下grails命令的使用(确保grails环境已配置好)。
grails command name
现在我们为了创建一个Grails应用,需要输入的命令是create-app
grails create-app helloworld
这样就在当前目录下创建了一个名为helloworld(即我们的应用程序名)的文件夹,在这个文件夹中包含了我们这个项目的整个文件目录,可以使用如下命令进入这个目录中查看:
cd helloworld
为了完成这个经典的Hello World示例,我们需要运行create-controller命令,您先进入CMD命令行并执行:
grails create-controller hello
运行该命令后会在grails-app/controller目录下创建一个名为HelloController.groovy的控制器 控制器主要用来完成对Web请求的处理,我们稍微修改一下控制器的内容,使它能够在页面上输出Hello World!的字样,代码如下:
class HelloController { def world = { render Hello World! }} 现在控制器已经完成了,接下来要使用run-app来启动内置的jetty服务器运行刚刚创建的helloworld程序
grails run-app运行后会在8080端口(默认,可以使用-Dserver.port来指定端口)启动服务器,然后在浏览器中输入http://localhost:8080/helloworld来启动应用程序.
4. 用IntelliJ IDEA 8.0创建Grails项目的时候提示没SDK
IntelliJ IDEA需要安装JetGroovy插件。
安装之后创建项目时选择GRAILS.
如果项目已创建,则选择file->project Structure->moles->展开项目名称->GRAILS
从里面选择一个SDK,如果没有就点击”NEW",然后选择下载的GRAILS所在目录,新建一个。
5. 如何配置会话超时Grails应用程序
1. 另一种办法是修改web.xml文件。在此之前你必须调用 grails install-templates
然后在编辑的src /模板/战争/ web.xml文件,添加/修改servlet的映射后: <session-config>
<session-timeout>60</session-timeout>
</session-config>
价值会话使用分钟为单位。
2.
你可以看看这个博客通过代码来设置会话间隔。
3.
我可能是错的,但我敢肯定的会话与应用程序容器关联。如果你的Tomcat,例如,您可以指定一个会话的长度。 教程改变Tomcat的会话长度。
4.
当前的Grails(2.x的)有一个非常奇怪的设计方法,以设定的主流观念会话都不是很大的:出“//会话部分中的WebxmlGrails插件,并添加”sessionConfig。到Config.groovy中
Grails的安装,模板,删除会话从web.xml中,加入WebXmlConfig.groovy 等待修复。 :/
一位同事与下面的代码,效果很好,并会做,直到一个真正的解决方案内置到Grails的核心。
只需将下面的添加到您的Config.groovy中文件的底部,然后设置相应的 grails.war.resources = { stagingDir, args ->
def webXML = new java.io.File("${stagingDir}/WEB-INF/web.xml")
webXML.text = webXML.text.replaceFirst("<session-timeout>30</session-timeout>", "<sesson-timeout>90</session-timeout>")
}
我的建议是正确的解决方案是允许一个单一的线在Config.groovy中的文件: session.timeout = 90;
6. 安装Grails后进行run-app出现如下错误,java重装后依然没有解决
在run-app之后会自动读取application.properties里面需要的插件,如果没有会自动从网络中下载 建议用SpringSource Tool Suite进行开发,很好用
7. intellij idea怎么配置grails
IntelliJ IDEA需要安装JetGroovy插件。
安装好插件之后,
在FILE->NEW后选择“Create project from scratch
然后在Select Type中就可以选择"Grails Application"了,
这时新建的就是GRAILS程序。会自动包含controller domain view
在相应的部分按右键New->菜单下会包含Grails的domain controller service scipt taglib gsp这么六种文件选项。
8. grails中blank和nullable的区别
Grails是一套用于快速Web应用开发的开源框架,它基于Groovy编程语言,并构建于Spring、Hibernate和其它标准Java框架之上,从而为大家带来一套能实现超高生产力的一站式框架。
Ruby on Rails开创了将一门强大的编程语言和一个坚持己见、提倡用通情达理的默认设置代替复杂配置的框架进行创造性结合的先河。然而,还有许多组织并没有做好从Java的安全保护伞下走出的准备,也没有打算放弃他们目前在Java上的投入。而Grails的出现,使得在一个以Java为中心的环境中实现同等生产力的想法成为可能。
Grails的插件系统
grails的插件系统也是其亮点之一。首先,和rails,django等web框架类似,基于微内核的思想,插件(可重用模块)是框架的一等公民。grails除了核心模块以外的功能几乎都是通过插件方式实现的。实际上,一个grails插件和一个grails应用基本是完全一样的,同样可以使用grails run-app命令来运行。区别仅在于一个插件的根目录下需要提供一个fooplugin.groovy文件,提供插件的一些描述信息。
grails插件基本可以做任何事情,grails社区已经提供了各式各样的插件,发布在grails官方插件源上。查看现有的官方插件,可以执行下面的命令:
grails list-plugins
安装插件可以执行以下命令:
grails install-plugin 插件名或插件路径
9. 请问grails i18n插件使用中遇到Application metadata not found, please run: grails upgrade,如何解决
根据字面的意思,你应该在命令行方式下运行:grails upgrade
现在的grails都自带i18n功能,不需要另外安装插件。不知你的版本是多少,建议升级版本。
我的GRAILS程序的I18N文件在:程序目录/grails-app/i18n目录中。messages_zh_CN.properties