Grails -g:字段重置和html重置不会清除表单/ params / session

时间:2016-03-15 17:23:25

标签: grails

使用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:字段类型代码

<div class="filter">
                <h3>Filter:</h3>
                <g:form action="index" method="post" >
                    <label for='name'>Name:</label> 
                      <input type="text" id="name" name="name" value="${session.name}"/><br/>
                      <span class="button">
                      <g:submitButton name="index" class="index" value="Apply Filter" /></span>
                      <g:field type="reset" name="myReset" value="Reset" />
                </g:form>
</div>

HTML标记类型

<div class="filter">
                <h3>Filter:</h3>
                <g:form action="index" method="post" >
                    <label for='name'>Name:</label> 
                      <input type="text" id="name" name="name" value="${session.name}"/><br/>
                      <span class="button">
                      <g:submitButton name="index" class="index" value="Apply Filter" /></span>
                    <input type='reset' value='Reset' />
                </g:form>
</div>

2 个答案:

答案 0 :(得分:1)

表单的HTML表单重置按钮将表单重置为初始状态。在这种情况下,回到表单加载时的值。 HTML表单重置按钮不会清除表单或清除会话。

答案 1 :(得分:0)

想知道你为什么要使用session来使用典型形式params?为了清除HTML会话,您需要触发回原始控制器的呼叫,就像您要发布但通过此呼叫接收时一样。它执行session.invalidate(),然后再次呈现相同的视图。您应该尝试使用params来表单。您拥有会话信息的事实确实不需要通过表单发布。接收表单的控制器会知道相同的会话值。

您可以使用触发按钮和重置表单轻松创建jquery功能。 jQuery/Javascript function to clear all the fields of a form

如果这不起作用,您可以尝试例如:

<g:form ..>
..
<button onClick="clearName();" name="clickme">
</g:form>

<g:javascript>
function clearName()  {
  $('#name').val();
}
</g:javascript>