我想知道如何在我的视图中从控制器的列表中填充文本框,我一直在搜索示例,但是没有真正找到任何内容。我不确定如何从视图中准确地访问文本字段,在Java中你可以做一些像jTextField.getText()
这样简单的事情。我也想知道如何在文本框中抓取文本。
下面我将发布一些我正在做的示例代码。
控制器:
def loadFile = {
def propFile = "c:/props.txt"
def propMap = [:]
def propList = []
new File(propFile).eachLine { line ->
def (key,value) = line.split(':').collect { it.trim() }
propMap."$key" = "$value"
if(propMap) {
propList << propMap
propMap = [:]
}
}
}
def saveFile = {
//get contents of text box
//over-write props.txt with new information
}
查看:
<g:textField name="properties"/>
<span class="menuButton"/><g:link action="loadFile" controller="myController">Load File</g:link>
<span class="menuButton"/><g:link action="saveFile" controller="myController">Save File</g:link>
所以,我的问题看起来比较直接,当我想填充它并保存数据时如何访问文本框?
修改
在查看了你们提交的一些例子之后,我还有最后一个问题。
单击Load File
按钮时,为什么以下代码有所不同?
<g:form controller="drive">
<g:textArea name="properties" value="${params.param1}" rows="50" cols="6"/>
<br/>
<g:submitButton name="loadFile" value="Load File"/>
<g:submitButton name="saveFile" value="Save File"/>
</g:form>
<span class="menuButton"/><g:link action="loadFile" controller="drive">Load File</g:link>
点击处理g:submitButton
的{{1}}时,我会将我重定向到loadFile
gsp。但是,当我单击list
时,它会使用文件中的文本加载textArea。我问的原因是因为第二个选项,按钮不在我希望的位置。
答案 0 :(得分:4)
在表单标记中包装文本字段。这样,当您提交它时,您可以访问控制器中的字段。
<g:form controller="myController" action="saveFile">
<g:textField name="properties"/>
<g:submitButton name="saveFile" value="Save File" />
</g:form>
然后,您可以访问控制器中的properties
字段:
def saveFile = {
def properties = params.properties
// do whatever you need
}
为了解决评论后面提出的一些问题,我将尝试提供更多见解。
假设您的控制器名为Drive
,而视图(提交属性的表单)为drive/properties.gsp
。如果希望您的加载按钮将属性加载到文本区域,您可以执行以下操作:
def loadFile = {
// your code here
render(view: 'properties.gsp', model=[properties:propList])
}
在你看来:
<g:form controller="drive">
<g:textArea name="properties" value="${properties?.join("\n")}" rows="50" cols="6"/>
<br/>
<g:actionSubmit name="loadFile" action="loadFile" value="Load File"/>
<g:actionSubmit name="saveFile" action="saveFile" value="Save File"/>
</g:form>
这应该使用您的文件中的值呈现您的表单,每个属性都在新行中。但我没有测试它。
答案 1 :(得分:4)
jjczopek's answer显示了从视图提交后如何访问控制器中的数据。
您可以通过在控制器中设置参数来将默认值从控制器传递到视图,例如......
params.param1 ='value to pass'
render(view:"testView")
然后在您的视图中,您可以使用...
再次检索它<g:textField name="text1" value="${params.param1}"/>
您可能还会发现this question和these docs有用。
如果想通过域对象,那么以下特定渲染方法之一可能会更好...... Grails Controller - Render