0

私は grails の通常の datePicker を使用していましたが、横にカレンダーがある textField を使用する方が簡単であると判断し、Grails-UI を使用するように勧められました。

私の問題は、クリックしてフィルターを適用しても機能しないことです。どういうわけか、それらは認識されていません。

どんな助けでも大歓迎です。

コントローラーのコードは次のとおりです。

def searchResults = {
  def fromCal
  if(params?.lastUpdatedD) {
fromCal = Calendar.getInstance()
fromCal.setTime(params?.lastUpdatedD)
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?.lastUpdatedH) {
toCal = Calendar.getInstance()
toCal.setTime(params?.lastUpdatedH)
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", params.fechaCambioD, params.fechaCambioH) 
} 

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

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]) 

そして、これは gui:datePicker が宣言されている search.gsp のコードの一部です。

<gui:datePicker name="fechaCambioH" value="${params?.fechaCambioH}" formatString="dd/MMM/yyyy"/>

それらを変更すると<<gui:datePicker name="fechaCambioH" value="${params?.fechaCambioH}" precision="day" default="none" noSelection="['':'']" years="${2010..2015}"/>/>、完全に正常に機能しますが、月と年の3つのドロップダウンボックスが表示されます。アイデアは、見栄えを良くするために、横にカレンダーのある1つのテキストフィールドのみを使用することです.

前もって感謝します

アップデート

これがlist.gspにあるコードです

def list = {
    params.max = Math.min(params.max ? params.int('max') : 10, 100)
    [entryInstanceList: Entry.list(params), entryInstanceTotal: Entry.count()]
    def today = Calendar.getInstance()
    today.setTime(new Date())
    today.set(Calendar.HOUR_OF_DAY, 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])

だから、フィルタリングされたものを並べ替えるために同じことができるかどうか知りたかった. 各列のタイトルをクリックすると、フィルター処理された後、リストからすべての項目が並べ替えられるようになりました。新しいエントリを作成するたびにそれを行うと、今日からそれらが並べ替えられますが (表示されているもののみ)、フィルタを適用してから並べ替えると、表示されているものだけでなく、リストのすべての項目が並べ替えられます.

少しややこしいと思いますが、お役に立てれば幸いです。

前もって感謝します!

4

1 に答える 1

1

は、日付の文字列値をコントローラーに渡します。コントローラーに送信された文字列を解析して Date オブジェクトにする必要があります。Date クラス ( http://groovy.codehaus.org/groovy-jdk/java/util/Date.html ) と SimpleDateFormat クラス ( http://download.oracle.com/docs ) の parse() メソッドを見てください。 /cd/E17476_01/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html )。SimpleDateFormat のドキュメントを使用して日付の書式文字列を作成し、Date クラスを使用して文字列を解析して日付に変換します。例えば...

def dateFmt = "dd/MMM/yyyy"
def fechaCambioDateH 
def toCal
if(params?.fechaCambioH) {
   fechaCambioDateH = Date.parse(dateFmt, params?.fechaCambioH)
   toCal = Calendar.getInstance()
   toCal.setTime(fechaCambioDateH)
   // You may not need these anymore:
   toCal.set(Calendar.HOUR_OF_DAY,23)
   toCal.set(Calendar.MINUTE,59)
   toCal.set(Calendar.SECOND,59)
   toCal.set(Calendar.MILLISECOND,999)
}

アップデート:

申し訳ありませんが、コメントに収まりません:

その動作の原因を説明させてください。ご自分でこの問題を解決できるかもしれません。Grails のコツをつかみ始めたようです。フィルター フォームを送信すると、すべてのフォーム データ (日付範囲、proyectoRuta など) が送信されます。これが POST 操作であることは既にご存じだと思いますが、ブラウザーがすべてのデータをサーバーに送信し、Grails が処理します。アクセスできる便利な params オブジェクトにパッケージ化します。ただし、並べ替えリンクをクリックすると、それは GET 操作になります。ブラウザは単に URL をバックエンドに送信しています。基本的に、条件検索にヒットしていますが、チェックしているすべてのパラメーターが null です。したがって、基本的に、ドメイン オブジェクトのリスト全体を取得しています。この時点で、あなたの仕事はより複雑になります。Web アプリで状態を管理する必要があるということです。これを行う最も簡単な方法は、ユーザーのセッションにデータを保存することです。これにより、検索ロジックがいくつかのアクション (デフォルトとフィルター) に分散しているため、複雑さが増します。基本的に、検索結果をセッションに保存して Comparator を使用して並べ替えるか、検索条件をセッションに保存して、誰かが並べ替えリンクをクリックしたときに別の並べ替え/順序を適用できます。検索ロジックがいくつかのアクション (デフォルトとフィルター) に分散しています。基本的に、検索結果をセッションに保存して Comparator を使用して並べ替えるか、検索条件をセッションに保存して、誰かが並べ替えリンクをクリックしたときに別の並べ替え/順序を適用できます。検索ロジックがいくつかのアクション (デフォルトとフィルター) に分散しています。基本的に、検索結果をセッションに保存して Comparator を使用して並べ替えるか、検索条件をセッションに保存して、誰かが並べ替えリンクをクリックしたときに別の並べ替え/順序を適用できます。

于 2010-07-08T17:20:46.530 に答える