0

index.gsp では、これを list.gsp にリダイレクトする必要があるため、次のようになると想像しています。

${response.sendRedirect("entry/list")}

私のフィルタは、1 つの textField と 2 つの datePickers とドロップダウン ボックス (DD-MMM-YYYY) だけで、デフォルトでは今日の日付から無限大までフィルタリングする必要があります。したがって、まだ発生していないイベントのみが表示されますが、古いイベントはデータベースに残っているはずです。

背景情報に関する私の最後の 3 つの質問へのリンクは次のとおりです。

大量のデータがあり、Grails を使用したデータ フィルターが必要です

Grails: Grails テーブルのデータを動的にフィルタリングする

Grails: リンクの編集と削除が機能しない

2番目のものは、私のコードのほとんどを含むものだと思います。

どんな助けでも大歓迎で、高く評価されます。ありがとう!:)そして、すべての助けをしてくれたprofluxに再び感謝します!

アップデート

ここにlist.gspがあります

<g:each in="${entryInstanceList}" status="i" var="entryInstance">
                    <tr class="${(i % 2) == 0 ? 'odd' : 'even'}">
                        <td><g:formatDate format="dd-MMMM-yyyy" date="${entryInstance.fechaCambio}" /></td>
                        <td><b>${fieldValue(bean: entryInstance, field: 'proyectoRuta')}</b></td>
                        <td>${fieldValue(bean: entryInstance, field: 'summary')}</td>
                        <td><g:formatDate format="dd-MMM-yyyy HH:mm z" date="${entryInstance.lastUpdated}" /></td>
                        <td>
                        <g:form>
                            <g:hiddenField name="id" value="${entryInstance?.id}" />
                            <span class="simple"><g:actionSubmit class="editar" action="edit" value="${message(code: 'default.button.editar.label', default: '&nbsp;&nbsp;&nbsp;')}" /></span>
                            <span class="simple"><g:actionSubmit class="eliminar" action="delete" value="${message(code: 'default.button.eliminar.label', default: '&nbsp;&nbsp;&nbsp;')}" onclick="return confirm('${message(code: 'default.button.delete.confirm.message', default: 'Esta seguro que desea Eliminar?')}');" /></span>
                        </g:form>
                        </td>
                    </tr>
</g:each>

アップデート

これが searchResults コードです。

def searchResults = { 
    def entryCriteria = Entry.createCriteria()

    def results = entryCriteria.list {
        and{if(params?.fechaCambioD && params?.fechaCambioH) { 
            between("fechaCambio", params.fechaCambioD, params.fechaCambioH) 
            } 

        if(params?.lastUpdatedD && params?.lastUpdatedH) { 
            between("lastUpdated", params.lastUpdatedD, params.lastUpdatedH) 
            }

        if(params?.proyectoRutaN) { 
            ilike("proyectoRuta","%${params.proyectoRutaN}%")
            }            
        }
        }
        render(view:'searchResults', model:['results':results, 'proyectoRutaN':params?.proyectoRutaN, 'fechaCambioD':params?.fechaCambioD, 'fechaCambioH':params?.fechaCambioH, 'lastUpdatedD':'', 'lastUpdatedH':params?.lastUpdatedH]) 
}

そして、私はすでに結果を使用しており、リストであるため、どうすればいいですか?別の名前を付けて、最後に結果の後にモデルに入れますか?? お気に入り:

render(view:'searchResults', model:['results':results, 'otherResults':otherResults, 'proyectoRutaN':params?.proyectoRutaN, 'fechaCambioD':params?.fechaCambioD, 'fechaCambioH':params?.fechaCambioH, 'lastUpdatedD':'', 'lastUpdatedH':params?.lastUpdatedH])

それとも、結果内で定義する必要がありますか??

アップデート

<table><tbody class="yui-skin-sam">
<tr class="prop">
    <td valign="top" class="name"><b>Proyecto/Ruta: </b> &nbsp;&nbsp;&nbsp;<g:textField name="proyectoRutaN" value="${proyectoRutaN}" /></td>
    <td></td>
    <td valign="top" class="name"><b>Fecha de Implementación: </b></td>
    <td></td>
    <td valign="top" class="name"><b>Fecha de Última Modificación: </b></td>
</tr>
<tr class="prop">
    <td></td>
    <td valign="top">Desde:</td>
    <td valign="top"><gui:datePicker name="fechaCambioD" value="${params?.fechaCambioD}"  formatString="dd/MMM/yyyy"/></td>
    <td valign="top">Desde:</td>
    <td valign="top"><gui:datePicker name="lastUpdatedD" value="${params?.lastUpdatedD}" default="none"/></td>
</tr>
<tr class="prop">
    <td></td>
    <td valign="top">Hasta:</td>
    <td valign="top"><gui:datePicker name="fechaCambioH" value="${params?.fechaCambioH}"  formatString="dd/MMM/yyyy"/></td>
    <td valign="top">Hasta:</td>
    <td valign="top"><gui:datePicker name="lastUpdatedH" value="${params?.lastUpdatedH}" default="none"/></td>
</tr>

何らかの理由でフィルターを適用すると、リストにすべてが表示され (フィルター処理されません)、フィルター内の textFields はフィルターが適用された日付を保存しません。

これを修正する方法についてのアイデアはありますか?

4

2 に答える 2

1

基準の fechaCambio の場合、次のようなことができます。

def searchResults = { 
    def fromCal
    if(params?.fechaCambioD) {
      fromCal = Calendar.getInstance()
      fromCal.setTime(param?.fechaCambioD)
      fromCal.set(Calendar.HOUR_OF_DAY,0)
      fromCal.set(Calendar.MINUTE,0)
      fromCal.set(Calendar.SECOND,0)
      fromCal.set(Calendar.MILLISECOND,0)
    }
    def toCal
    if(params?.fechaCambioH) {

      toCal = Calendar.getInstance()
      toCal.setTime(param?.fechaCambioH)
      toCal.set(Calendar.HOUR_OF_DAY,23)
      toCal.set(Calendar.MINUTE,59)
      toCal.set(Calendar.SECOND,59)
      toCal.set(Calendar.MILLISECOND,999)
    }
    def entryCriteria = Entry.createCriteria()

    def results = entryCriteria.list {
        and{if(params?.fechaCambioD && params?.fechaCambioH) { 
            between("fechaCambio", fromCal.getTime(), toCal.getTime()) 
            } 

        if(params?.lastUpdatedD && params?.lastUpdatedH) { 
            between("lastUpdated", params.lastUpdatedD, params.lastUpdatedH) 
            }

        if(params?.proyectoRutaN) { 
            ilike("proyectoRuta","%${params.proyectoRutaN}%")
            }            
        }
        }
        render(view:'searchResults', model:['results':results, 'proyectoRutaN':params?.proyectoRutaN, 'fechaCambioD':params?.fechaCambioD, 'fechaCambioH':params?.fechaCambioH, 'lastUpdatedD':'', 'lastUpdatedH':params?.lastUpdatedH]) 
}

繰り返しますが、これは手っ取り早い方法です。あまりエレガントではありませんが、あなたの問題を理解していれば、あなたが望むことをするはずです。

于 2010-07-01T02:03:35.853 に答える
0

GSP でリダイレクトを行う代わりに、インデックス コントローラー メソッドを次のように更新することをお勧めします。

def index {
  redirect(action:'list')
}

このように、コントローラー ロジックはすべてコントローラー内にあり、GSP とコントローラーの両方にはありません。

2 番目の要件は少しトリッキーですが、それほど悪くはありません。基本的に、条件ロジックを更新する必要があります。私はあなたが2つのケースだけを気にしていると仮定します:

  1. あなたはfechaCambioDとfechaCambioHの両方を持っています
  2. fechaCambioD があり、fechaCambioH がない (デフォルト - 今日から時間の終わりまで)

そして、時間の始まりから fechaCambioH までのすべてのエントリを見つけることは気にしません。

その場合は、コントローラーのロジックを次のように変更します。

def fechaCambioD = params?.fechaCambioD ?: new Date()

def results = entryCriteria.list {
    if(params?.fechaCambioD && params?.fechaCambioH) { 
        between("fechaCambio", params.fechaCambioD, params.fechaCambioH) 
    } 
    else {
      gte("fechaCambio", fechaComabioD)
    }

    if(params?.lastUpdatedD && params?.lastUpdatedH) { 
        between("lastUpdated", params.lastUpdatedD, params.lastUpdatedH) 
        }

    if(params?.proyectoRutaN) { 
        ilike("proyectoRuta","%${params.proyectoRutaN}%")
        }            
    }

したがって、基本的には次のとおりです。

  1. fechaCambioD パラメーターを取得しなかった場合は、fechaCambioD を現在の時刻にデフォルト設定します。
  2. fechaCambioD と fechaCambioH の両方がない場合は、fechaCambio が現在の時間より大きいすべてのエントリを検索します。

うまくいくと思いますが、うまくいかない場合はお知らせください...

アップデート:

わかりました、私の間違いです。gte 比較子はありません。それは、以上を表す ge と、より大きいを表す gt だけです。検索条件はリストの方が単純なので、おそらくメソッドを次のように変更できます。

def list = {
   def today = Calendar.getInstance()
   today.set(Calendar.HOUR, 0)
   today.set(Calendar.MINUTE, 0)
   today.set(Calendar.SECOND, 0)
   today.set(Calendar.MILLISECOND, 0)
   def results = Entry.findAllByFechaCambioGreaterThanEquals(today.getTime()) 
   render(view:'list', model:['entryInstanceList':results])
}

これがうまくいかない場合は、私に知らせてください...

于 2010-06-30T15:03:39.697 に答える