Grails - g:field重置和html重置无法清除表单/参数/会话
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标签类型
筛选:
问题的原因是HTML的form reset按钮只会将表单重置为初始状态,即重新加载表单时的初始值,并不会清除表单或会话(session)中的内容。在这个问题中,使用Grails的g:field方法也无法解决这个问题。
解决方法可以参考sofb.developer-works.com/article/28045027/…中提到的方法,或者是否有其他方法可以实现清除表单的功能。或者我是否遗漏了什么?
原因:问题的根本原因是在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解决方法对你有帮助。如果还有其他问题,请更新问题描述。