单击 <g:actionSubmit> 按钮时,控制器中的参数值始终为空
params values are always null in controller on clicking <g:actionSubmit> button
在我的应用程序中,我有搜索按钮,根据搜索条件,我必须搜索数据。我使用了几个隐藏变量来存储数据。
我的 .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
}
}
当我单击搜索按钮并调试代码时,首先我的控件转到 controller-> findJob() 方法并执行 html 部分内的代码。
其次,它进入 gsp 页面(查看页面)并设置 value.Third,它再次进入控制器并执行 json 部分中的代码。
第一次进入controller时,param中paginationFlag和country的值为null。因此它将分别设置值 'false' 和 'USA'。但是当控制第二次再次转到控制器时,param.paginationFlag 和 params.country 的值再次为空。他们不应该有指定的值吗?
为什么会这样?第二次去获取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>
提示
你也可以简单的params赋值:
def country = params.country ?: 'USA'
def paginationFlag = params.paginationFlag ?: 'false'
我不知道 paginationFlag
从哪里来,但知道 boolean
是有效的。
在我的应用程序中,我有搜索按钮,根据搜索条件,我必须搜索数据。我使用了几个隐藏变量来存储数据。
我的 .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
}
}
当我单击搜索按钮并调试代码时,首先我的控件转到 controller-> findJob() 方法并执行 html 部分内的代码。 其次,它进入 gsp 页面(查看页面)并设置 value.Third,它再次进入控制器并执行 json 部分中的代码。
第一次进入controller时,param中paginationFlag和country的值为null。因此它将分别设置值 'false' 和 'USA'。但是当控制第二次再次转到控制器时,param.paginationFlag 和 params.country 的值再次为空。他们不应该有指定的值吗?
为什么会这样?第二次去获取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>
提示
你也可以简单的params赋值:
def country = params.country ?: 'USA'
def paginationFlag = params.paginationFlag ?: 'false'
我不知道 paginationFlag
从哪里来,但知道 boolean
是有效的。