gikoha’s blog

個人的メモがわり

ファイルのダウンロード

AbookController.groovyに追加

	def vcfsave =
	{
		def abookInstance = Abook.get(params.id)
		if (abookInstance)
		{
			VCard vcard = new VCardImpl()

			vcard.setBegin(new BeginType())
			vcard.setVersion(new VersionType(VCardVersion.V3_0))
			vcard.setName(new NameType(abookInstance.name))
			vcard.setFormattedName(new FormattedNameType(abookInstance.name))
			AddressType addr = new AddressType()
			addr.setStreetAddress(abookInstance.address)
			addr.setPostalCode(abookInstance.postalnum)
			vcard.addAddress(addr)
			vcard.addTelephoneNumber(new TelephoneType(abookInstance.phone))
			vcard.setEnd(new EndType())
			VCardWriter writer = new VCardWriter()
			writer.setVCard(vcard)
			String vstring = writer.buildVCardString()

			response.setHeader "Content-disposition", "attachment; filename=test.vcf"
			response.contentType = 'text/x-vcard; charset=utf-8'
			response.outputStream << vstring.getBytes()
			response.outputStream.flush()
		}
		else
		{
			flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'abook.label', default: 'Abook'), params.id])}"
			redirect(action: "list")
		}
	}

message.properties に追加

default.vcfsave.label=Export VCF {0}
default.vcfload.label=Import VCF as {0}
default.button.vcfsave.label=Export As VCF
default.file.blank.message=File cannot be empty

show.gsp内の div class="button" 内に追加

<span class="button"><g:actionSubmit class="vcfsave" action="vcfsave"
value="${message(code: 'default.button.vcfsave.label')}" />
</span>