http://grails.org/doc/latest/guide/theWebLayer.html#uploadingFiles
リファレンスのようにこんな感じで実装すればうまく動作した。
GSPに以下のようなタグを記述する。
Controllerを以下のように実装する。
Upload Form: <br /> <g:uploadForm action="upload"> <input type="file" name="myFile" /> <input type="submit" /> </g:uploadForm>
def upload() { def f = request.getFile('myFile') if (f.empty) { flash.message = 'file cannot be empty' render(view: 'uploadForm') return } f.transferTo(new File('/some/local/dir/myfile.txt')) response.sendError(200, 'Done') }
// log4j configuration log4j = { // Example of changing the log pattern for the default console // appender: // //appenders { // console name:'stdout', layout:pattern(conversionPattern: '%c{2} %m%n') //} error 'org.codehaus.groovy.grails.web.servlet', // controllers 'org.codehaus.groovy.grails.web.pages' // GSP, 'org.codehaus.groovy.grails.web.sitemesh', // layouts 'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping 'org.codehaus.groovy.grails.web.mapping', // URL mapping 'org.codehaus.groovy.grails.commons', // core / classloading 'org.codehaus.groovy.grails.plugins', // plugins 'org.codehaus.groovy.grails.orm.hibernate', // hibernate integration 'org.springframework', 'org.hibernate', 'net.sf.ehcache.hibernate' }
[class jp.co.wave.dsam.Test]クラスのプロパティ[name]の空白は許可されません。これだとユーザーに全然優しくないので、分かりやすいメッセージに変更する方法を照会します。
項目 | 内容 |
---|---|
OS | Mac OS X 10.06 |
Grails | 2.0.4 |
If a constraint is violated Grails will by convention look for a message code of the form: [Class Name].[Property Name].[Constraint Code] In the case of the blank constraint this would be user.login.blank so you would need a message such as the following in your grails-app/i18n/messages.properties file: user.login.blank=Your login name must be specified! The class name is looked for both with and without a package, with the packaged version taking precedence. So for example, com.mycompany.myapp.User.login.blank will be used before user.login.blank. This allows for cases where your domain class message codes clash with a plugin's. For a reference on what codes are for which constraints refer to the reference guide for each constraint.Googleで翻訳してみますと、
制約が違反している場合は、Grailsは慣例により、フォームのメッセージコードを探します。 [Class Name].[Property Name].[Constraint Code] このようなあなたのgrails-app/i18n/messages.propertiesファイルに次のようなメッセージが必要になりますので、空白の制約の場合、これはuser.login.blank次のようになります。 user.login.blank=Your login name must be specified! クラス名が優先してパッケージ化されたバージョンでは、とと、パッケージなしの両方で検索されます。したがって、たとえば、com.mycompany.myapp.User.login.blankはuser.login.blank前に使用されます。これは、ドメインクラスのメッセージコードは、プラグインのと衝突例が可能になります。 制約は、それぞれの制約のためにリファレンスガイドを参照しているコードが何であるかに参考のため。これを自分なりに読み解きますと、
validationでエラーが発生すると、 grails-app/i18n/messages.propertiesから、 [Class Name].[Property Name].[Constraint Code] という形式のメッセージコードを探します。 独自に定義することにより、プラグインで表示するメッセージとと異なるメッセージを出力することができます。試しにやってみると、追加したメッセージが出力されることを確認しました。
項目 | 内容 |
---|---|
OS | Mac OS X Lion |
項目 | 内容 |
---|---|
OS | Mac OS X Lion |
POI | 3.8 |
import org.apache.poi.hssf.usermodel.HSSFWorkbook import org.apache.poi.ss.usermodel.Workbook class ChangeSheetName { publicstaticvoid main(String[] args) { File file = new File('test.xls') file.withInputStream { Workbook wb = new HSSFWorkbook(it) // 0番目のシートの名前を変更する wb.setSheetName(0, 'シート名を変更した') // 複製した結果を元ファイルに書き込む file.withOutputStream { wb.write(it) } } } }
項目 | 内容 |
---|---|
OS | Mac OS X Lion |
POI | 3.8 |
import org.apache.poi.hssf.usermodel.HSSFWorkbook import org.apache.poi.ss.usermodel.Workbook class CloneSheet { publicstaticvoid main(String[] args) { File file = new File('test.xls') file.withInputStream { Workbook wb = new HSSFWorkbook(it) // 0番目のシートを複製する wb.cloneSheet(0) // 複製した結果を元ファイルに書き込む file.withOutputStream { wb.write(it) } } } }
項目 | 内容 |
---|---|
OS | Mac OS X Lion |
Java | Java SE 7 (MacOS X Default) |
eclipse | Eclipse Indigo(3.7) |
Tomcat | Tomcat6 |
GroupSession | 4.0.3(訳あって最新版ではないです) |
import org.apache.poi.hssf.usermodel.HSSFWorkbook import org.apache.poi.ss.usermodel.Workbook class AddNewSheet { public static void main(String[] args) { new File('test.xls').withInputStream { Workbook wb = new HSSFWorkbook(it) // シートを5つ追加する (0..<5).each { wb.createSheet() } wb.createSheet('てすと') } } }
package jp.co.indoor.test; import org.dbunit.Assertion; import org.dbunit.JdbcDatabaseTester; import org.dbunit.dataset.xml.FlatXmlDataSet; import groovy.sql.Sql; import groovy.util.GroovyTestCase; import groovy.xml.StreamingMarkupBuilder; class DbUnitSampleTest extends GroovyTestCase { static { Sql.newInstance('jdbc:mysql://localhost:3306/test', '', '', 'com.mysql.jdbc.Driver').executeUpdate('delete from emp') // .execute( // """ // CREATE TABLE emp ( // empno INTEGER PRIMARY KEY, // ename VARCHAR(10), // job VARCHAR(9) // ); // """) } JdbcDatabaseTester tester void setUp() { tester = new JdbcDatabaseTester('com.mysql.jdbc.Driver', 'jdbc:mysql://localhost:3306/test', '', '') } void test() { tester.dataSet = dataSet { emp empno:7369, ename:'SMITH', job:'CLERK' emp empno:7499, ename:'ALLEN', job:'SALESMAN' emp empno:7521, ename:'WARD', job:'SALESMAN' } tester.onSetup() assert 1 == Sql.newInstance('jdbc:mysql://localhost:3306/test', '', '', 'com.mysql.jdbc.Driver').executeUpdate('delete from emp where empno = 7499') Assertion.assertEquals dataSet { emp empno:7369, ename:'SMITH', job:'CLERK' emp empno:7521, ename:'WARD', job:'SALESMAN' }, tester.connection.createDataSet() } def dataSet(c) { new FlatXmlDataSet(new StringReader(new StreamingMarkupBuilder().bind{dataset c}.toString())) } }
import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Workbook; class ReadWorkbook { public static void main(String[] args) { new File('test.xls').withInputStream { Workbook wb = new HSSFWorkbook(it) println wb.getSheetName(0) // 読み込めたかどうか、確認するためコンソールにシート名を出力しています } } }
import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; class StartUp { /** * エントリーポイント * @param args */ public static void main(String[] args) { // WORKBOOKを作成する Workbook workbook = new HSSFWorkbook() // シートを作成する Sheet sheet = workbook.createSheet() // WORKBOOKを保存する FileOutputStream out = new FileOutputStream("test.xls") workbook.write(out) out.close() } }
private void tbl_listPropertyChange(java.beans.PropertyChangeEvent evt) { int row = tbl_list.getSelectedRow(); if (row != -1) { for (int col = 1; col < tbl_list.getColumnCount(); col++) { Object val = tbl_list.getValueAt(row, col); // (1) TableCellEditor editor = tbl_list.getCellEditor(row, col); // (2) Component comp = editor.getTableCellEditorComponent(tbl_list, val, true, row, col); // (3) comp.setEnabled(!machineList.get(row).getDeleteFlag()); // (4) } } } private void tbl_listMouseClicked(java.awt.event.MouseEvent evt) { int row = tbl_list.rowAtPoint(evt.getPoint()); int col = tbl_list.columnAtPoint(evt.getPoint()); tbl_list.changeSelection(row, col, false, false); // 5) }1)セルに設定されている値を取得する。