2015-10-28 25 views
0

在我的应用程序中,我有搜索按钮,并且基于搜索条件,我必须搜索数据。我用了很少的隐藏变量来存储数据。点击<g:actionSubmit>按钮时控制器中的params值始终为空。

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

当我点击搜索按钮和调试代码,首先我就进入到控制器 - > findJob()方法并执行html部分内的代码。 其次,它进入gsp页面(查看页面)并设置值。第三,它再次进入控制器并执行json部分内部的代码。

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

这是为什么?我应该怎么做第二次在params中获得国家和分页标志的价值?任何人都可以解释我吗?非常感谢您的提前。

回答

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是有效的。

+0

非常感谢罗莎的回答。并感谢提示。由于我对groovy很陌生,这些提示对我有很大的帮助。我也尝试使用。同样的事情发生在我身上。当我的控件第二次进入控制器方法时(我认为这是第二次调用ajax),params .country和params.pagination再次为null。 – Ryan

+0

不客气。确保'jobList'视图从控制器获取'country'和'paginationFlag'。然后确保第二次调用提供参数。 –

+0

我检查了它。当控制进入视图时,我可以获取jobList和paginationFlag的值。但是当调试再次发送到控制器(第二次)时,我将这些值作为空值。我发现一个选项是使用jobList和paginationFlag作为控制器中的全局变量。但我认为这可能会在稍后导致问题。 – Ryan