grails - 从<g:select下拉列表中获取所选值

标签 grails grails-2.0 grails-controller

我正在尝试获取2个链接的下拉列表。第一个显示远程服务器文件夹,选择后,第二个显示所选文件夹中的文件。接下来,我要将选择的文件复制到本地磁盘。但是我无法将文件名放入某个变量中以供以后使用。并且此列表是从 Controller 而不是gsp呈现的。点击此链接:http://grails.asia/grails-chained-select---load-data-on-one-dropdown-box-depending-on-another
下拉列表呈现得很好,但是问题是我需要从第二个下拉列表(文件名)中选择一个值,以供 Controller 使用,以备将来使用。请帮我解决这个问题。
域类:

package filemanager

class SourceServ {
	String sourceServName
	String sourceServFolder
	int sourceServPort
	String sourceServUser
	String sourceServPassword
	String localFolder
	Boolean selected
	static hasMany = [destservs: DestServ]
    static constraints = {
		sourceServName blank: false, nullable: false
		sourceServFolder blank: false, nullable: false
		sourceServPort blank: false, nullable: false
		sourceServUser blank: false, nullable: false
		sourceServPassword blank: false, nullable: false
		localFolder blank: false, nullable: false
		selected nullable: true
    }
	
static mapping = {
        destservs cascade: "all-delete-orphan"
    }
}


Controller :

package filemanager
import com.jcraft.jsch.*
import com.jcraft.jsch.ChannelSftp.*

class ChooseFromController {
	SourceServ sourceServ
	DestServ destServ
	String value
	String fileName
	String name
    def index(Integer max) 		{
        params.max = Math.min(max ?: 10, 100)
		model:[sourceServ: SourceServ]
    }
	//Вывод второго списка с файлами
	def sourceServChanged(long sourceServId) { 
		sourceServ = SourceServ.get(sourceServId)
		FileWork fileWork1 = new FileWork (sourceServ.getSourceServName(), sourceServ.getSourceServUser(), sourceServ.getSourceServPassword(), sourceServ.getSourceServFolder(), "C:/tmp/", sourceServ.getSourceServPort(), "null")
		Session ses
		ses = fileWork1.connect()
		def fileList = fileWork1.getFileList(ses) 
		ses.disconnect()
		render g.select(name:'fileName', 
			   from:fileList, noSelection:[null:'-Choose file to copy-'])
			   //onchange:getFileName(this.value))
		render fileName
	}
	def getFileName(input){
		render "Hello" //input //fileName
	}
	def copyToLocal(String x) {
		render fileName//sourceServ.getSourceServName()
	}
}


GSP:

<%@ page contentType="text/html;charset=UTF-8" import="filemanager.SourceServ" import="filemanager.DestServ"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<meta name="layout" content="main"/>
<title>Выбор исходного сервера</title>
 <g:javascript library='jquery' />
</head>
<body>
  <div class="body">
  <%--Список исходных серверов с составным option value(то, что выводится в списке)--%>
 <b>Выберите исходный сервер и папку</b>
<div>
 <g:select id="id" name="sourceServName" from="${sourceServ.list()}" value="${id}"
 				 optionKey="id"
          		 optionValue="${{it.sourceServName+it.sourceServFolder}}" noSelection="['':'-Choose source server-']" 
          		 onchange="sourceServChanged(this.value);"/> <%--Передача id в sourceServId--%>
</div>
        <div>
            <b>Выберите файл для копирования </b>
            <span id="subContainer"></span>
        </div>
        <script>
            function sourceServChanged(sourceServId) {
                <g:remoteFunction controller="ChooseFrom" action="sourceServChanged"
                	update="subContainer"
                    params="'sourceServId='+sourceServId"/>
            }
        </script>
 </div>   
 <br>    
	<%--<g:submitButton name="copyToLocal" class="button" value="copyToLocal" />--%>   
	<g:form controller="ChooseFrom">
          <g:actionSubmit value="Submit" action="copyToLocal"/>
    </g:form>

</body>
</html>

最佳答案

这里发生的是从您的JavaScript中将新的select元素呈现到窗体外部的范围“subContainer”中。尝试将span标签替换为form元素内

<g:form controller="ChooseFrom">
          <span id="subContainer"></span>
          <g:actionSubmit value="Submit" action="copyToLocal"/>
</g:form>

现在,当单击提交按钮时,它将值提交到ChooseFrom Controller中的copyToLocal操作。因此,从操作内部可以从params.fileName访问选定的值

关于grails - 从<g:select下拉列表中获取所选值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28532176/

相关文章:

javascript - 在服务端渲染局部 View 或在客户端发送json数据渲染模板

caching - 如何在Grails中启用缓存的情况下将不同服务器同步到GORM层

grails - Gail Maven-OSGI捆绑软件为依存关系-解决问题

grails - 将实例变量添加到Controller是否错误?

Grails 更新而不是删除

grails - 如何强制https

grails - 测试 grails Controller 抛出 java.NullPointerException

grails - 如何在 Grails 中创建特定于应用程序的配置

Grails 和子域

grails - 在grails Controller 中将字符串与检索到的值进行比较