Grails - g:field重置和html重置无法清除表单/参数/会话

4 浏览
0 Comments

Grails - g:field重置和html重置无法清除表单/参数/会话

使用Grails 3.0.9

为过滤器类创建一个清除表单/会话的按钮,但是无论我做什么都不起作用。

按钮就卡在那里,什么也不发生。

任何帮助将不胜感激

SupplyController

def index(Integer max) {

params.max = Math.min(max ?: 10, 100)

if (params.name)

session.name = params.name

else if (request.method != "POST")

params.name = session.name

else

session.name = null

def criteria = Supply.createCriteria()

def query = {

and{

if (params.name) {

like ("name", '%' + params.name + '%')

}

}

}

def results = criteria.list(params, query)

respond results, model:[supplyCount: results.getTotalCount()]

}

G:field类型的代码

筛选:

HTML标签类型

筛选:

0
0 Comments

问题的原因是HTML的form reset按钮只会将表单重置为初始状态,即重新加载表单时的初始值,并不会清除表单或会话(session)中的内容。在这个问题中,使用Grails的g:field方法也无法解决这个问题。

解决方法可以参考sofb.developer-works.com/article/28045027/…中提到的方法,或者是否有其他方法可以实现清除表单的功能。或者我是否遗漏了什么?

0
0 Comments

原因:问题的根本原因是在Grails中,使用g:field reset或者html reset无法清除form/params/session中的数据。一种可能的原因是作者在使用session时,应该使用form params,因为清除HTML session需要触发一个回调到原始控制器的请求。当控制器接收到该请求时,会执行session.invalidate(),然后再次渲染相同的视图。因此,建议使用params来处理表单数据,而不是使用session。

解决方法:有两种解决方法。一种是使用jQuery或JavaScript的方法来清除表单中的所有字段。可以通过创建一个按钮,然后绑定一个resetform的功能来实现。另一种方法是在按钮的onClick事件中调用一个JavaScript函数来清除特定字段的值。

以下是使用jQuery的解决方法:

<a href="https://stackoverflow.com/questions/6653556">jQuery/Javascript function to clear all the fields of a form</a>
<g:form ..>
..
<button onClick="clearName();" name="clickme">
</g:form>
<g:javascript>
function clearName()  {
  $('#name').val();
}
</g:javascript>

希望这个JavaScript解决方法对你有帮助。如果还有其他问题,请更新问题描述。

0