Grails 单击<;时,控制器中的参数值始终为空;g:actionSubmit>;按钮

Grails 单击<;时,控制器中的参数值始终为空;g:actionSubmit>;按钮,grails,gsp,Grails,Gsp,在我的应用程序中,我有搜索按钮,根据搜索条件,我必须搜索数据。我使用了一些隐藏变量来存储数据 My.gsp页面如下所示: <g:form id="job" name="job" method="POST"> <div> <input type="hidden" id="country" name="country" value="${country}"/> <input type="hidden" id="paginationFlag" name="pa

在我的应用程序中,我有搜索按钮,根据搜索条件,我必须搜索数据。我使用了一些隐藏变量来存储数据

My.gsp页面如下所示:

<g:form id="job" name="job" method="POST">
<div>
<input type="hidden" id="country" name="country" value="${country}"/>
<input type="hidden" id="paginationFlag" name="paginationFlag" value="${paginationFlag}"/>
<!-- There are other components like text field, select box etc --> 
<g:actionSubmit id="Search" value="Search" formmethod="post"    action="findJob"/>
</div>
</g:form>
def  findJob(){
def country
def paginationFlag

if(params?.country){
  country = params?.country
}else{
  country = 'USA'
}

if(params?.paginationFlag){
 paginationFlag = params?.paginationFlag
}else{
 paginationFlag = 'false'
}

withFormat{
 html{
  List<Applicant> searchList //get data from database.
  // other business logic
    render(view : "jobList",model:[paginationFlag: paginationFlag, country:country])
}

json{
    // some business logic
    def candidateList // value for this candidateList is acquired from database
    def json = ['jsn': candidateList]
    render json as JSON
  }
}

我各自的控制器方法如下所示:

<g:form id="job" name="job" method="POST">
<div>
<input type="hidden" id="country" name="country" value="${country}"/>
<input type="hidden" id="paginationFlag" name="paginationFlag" value="${paginationFlag}"/>
<!-- There are other components like text field, select box etc --> 
<g:actionSubmit id="Search" value="Search" formmethod="post"    action="findJob"/>
</div>
</g:form>
def  findJob(){
def country
def paginationFlag

if(params?.country){
  country = params?.country
}else{
  country = 'USA'
}

if(params?.paginationFlag){
 paginationFlag = params?.paginationFlag
}else{
 paginationFlag = 'false'
}

withFormat{
 html{
  List<Applicant> searchList //get data from database.
  // other business logic
    render(view : "jobList",model:[paginationFlag: paginationFlag, country:country])
}

json{
    // some business logic
    def candidateList // value for this candidateList is acquired from database
    def json = ['jsn': candidateList]
    render json as JSON
  }
}
def findJob(){
def国家
def分页标志
如果(参数?国家/地区){
国家=参数?国家
}否则{
国家=‘美国’
}
if(参数?.paginationFlag){
paginationFlag=参数?.paginationFlag
}否则{
paginationFlag='false'
}
withFormat{
html{
列表搜索列表//从数据库获取数据。
//其他业务逻辑
呈现(视图:“作业列表”,模型:[分页标志:分页标志,国家/地区])
}
json{
//一些商业逻辑
def candidateList//此candidateList的值是从数据库中获取的
def json=['jsn':候选列表]
将json呈现为json
}
}
当我单击search按钮并调试代码时,首先我的控件转到controller->findJob()方法并在html部分中执行代码。 第二,它转到gsp页面(查看页面)并设置值。第三,它再次转到控制器并执行json部分中的代码

在控制器的第一个条目中,param中paginationFlag和country的值都为null。因此,它将分别设置值“false”和“USA”。但是,当控件再次转到控制器时,param.paginationFlag和params.country的值也为null。它们不应该具有指定的值吗


为什么会这样?我应该怎么做才能在第二次获取params中的country和paginationFlag的值?有人能解释一下吗?非常感谢您的帮助。

问题是您使用的是常规的HTML
input
标记,而不是Grails
g:hiddenField
标记。尝试以下方法:

<g:form id="job" name="job" method="POST">
    <div>
    <g:hiddenField name="country" value="${country}"/>
    <g:hiddenField name="paginationFlag" value="${paginationFlag}"/>
    <!-- There are other components like text field, select box etc --> 
    <g:actionSubmit id="Search" value="Search" formmethod="post"    action="findJob"/>
    </div>
</g:form>

我不知道
paginationFlag
是从哪里来的,但我知道
boolean
是有效的。

非常感谢Rosa的回答。也感谢这些提示。由于我是groovy新手,这些提示对我帮助很大。我也尝试过使用。同样的事情也发生在我身上。当我的控件转到控制器上时方法第二次(我认为这是第二次ajax调用),params.country和params.pagination再次为空。不客气。请确保
作业列表
视图从控制器获取
国家
分页标志
。然后确保第二次调用提供了参数。我检查了它。当控件转到视图时,我能够获取作业列表和分页的值inationFlag。但当json部分的调试再次转到控制器时(第二次),此时我将这些值设置为null。我发现一个选项在控制器中使用jobList和paginationFlag作为全局变量。但我认为这可能会在以后导致问题。