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

时间:2015-10-28 23:00:45

标签: grails gsp

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

我的.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
  }
}

当我点击搜索按钮并调试代码时,首先我的控件转到控制器 - &gt; findJob()方法并执行html部分内的代码。 其次,它进入gsp页面(查看页面)并设置value.Third,它再次进入控制器并执行json部分内的代码。

在控制器的第一个条目中,paginationFlag的值和param中的country都是null。因此它将分别设置值'false'和'USA'。但是当控制第二次再次进入控制器时,param.paginationFlag和params.country的值也为空。他们不应该有指定的值吗?

为什么会这样?我该怎么办才能第二次获得params的country和paginationFlag的值?任何人都可以解释一下吗?非常感谢你的进步。

1 个答案:

答案 0 :(得分:0)

问题是您使用的是常规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>

提示

你也可以简单地使用params赋值:

def country = params.country ?: 'USA'
def paginationFlag = params.paginationFlag ?: 'false'

我无法分辨paginationFlag来自何处,但知道boolean有效。