동적scaffold에 검색 폼 추가

7523 단어 filterpaneGrails

개요


Grails의 편리한 기능인 scaffold.
이것은 프로그래밍 없이 데이터베이스 데이터를 조회, 제작, 수정, 삭제할 수 있는 기능이다.
정적 scaffold라면Grails에서 만든 파일에 자신의 검색 형식을 추가할 수 있습니다.
하지만 도메인 이름이 많으면 매번 검색 형식을 추가하는 것이 번거롭다...
심지어 동적scaffold는 추가될 수 없다.
거기에 등장한 것은 확장 기능였다.
이것을 이용하면 검색 형식을 동적 출력할 수 있다.

플러그인 설치


어쨌든 플러그인을 설치해.
grails-app/conf/BuildConfig.groovy
...省略...
plugins{
    ...省略...
    compile ":filterpane:2.4.5"
}

이렇게 하면Grails의 재가동(인터랙티브 모드는 잠시 벗어나는 것이 좋다)이면 설치가 완료됩니다.

템플릿 수정


그리고 동적scaffold이기 때문에 당연히 HTML과 모든 동적 생성을 나타낸다.
따라서 템플릿을 수정할 필요가 있다.
다음 명령을 실행하여 템플릿을 설치합니다.grails install-templates

실제 수정


검색 창을 추가합니다.

src/templates/scaffolding/index.gsp에 소스를 몇 개 보충하세요.
구체적으로 Filterpane의 js와 css를 읽고 Filterpane의 실제 검색 표를 추가합니다.
src/templates/scaffolding/index.gsp
    <head>
        <meta name="layout" content="main">
        <asset:javascript src="fp.js"/><!-- この行を追加 -->
        <asset:stylesheet src="fp.css"/><!-- この行を追加 -->
        <g:set var="entityName" value="\${message(code: '${domainClass.propertyName}.label', default: '${className}')}" />
        <title><g:message code="default.list.label" args="[entityName]" /></title>
    </head>
    <body>

        <!-- ここから追加 -->
        <!-- この箇所に、実際の検索用フォームが表示される -->
    <div class="pagination">
        <g:paginate total="\${${propertyName}Count ?: 0}" params="\${filterParams}" namespace="backend.scaffold"/>
        <filterpane:filterButton />
        <filterpane:filterPane domain="${domainClass.fullName}"    />
    </div>
        <!-- ここまで追加 -->

검색 처리를 수행할 작업 추가


템플릿 컨트롤러에 다음 동작 방법을 추가합니다.
src/templates/scaffolding/Controller.groovy
    def filterPaneService
    def filter = {
        if(!params.max) params.max = 10
        render( view:'index',
                model:[ ${propertyName}List: filterPaneService.filter( params, ${className} ),
                        ${propertyName}Count: filterPaneService.count( params, ${className} ),
                                       filterParams: org.grails.plugin.filterpane.FilterPaneUtils.extractFilterParams(params),
                                       params:params 
                ]
        )
    }

이름 공간 사용 시 추가 처리


이름 공간을 사용하면 Filterpane 출력의form에서namespace를 지정해야 합니다.
target/work/plugins/filterpane-2.4.5/grails-app/views/_filterpane/_filterpane.gsp
    <form name="${fp.formName}" id="${fp.formName}" method="${fp.formMethod}" action="${createLink(action: fp.formAction, namespace:'backend.scaffold')} ">

이것으로 끝낼 준비를 하다.
적당한 영역을 만들고 동적 scaffold를 준비하여 컨트롤러로 접근해 보세요.
평소와 별다른 변화가 없는 scaffold 화면이 나올 거예요.
하지만 화면 위쪽에 Filter 링크가 나타납니다.
이것을 클릭하면 실제 검색 형식이 나타납니다.

죄송합니다. hasManybelongsTo를 필두로 다른 영역의 속성을 유지하는 데 있어서 검색 표에 항목이 생성되지 않을 것 같습니다.
그래도 연관성을 잘 맺으면 부역에서 검색할 수 있는 것이 필요하다고 생각합니다.

참고 자료


http://grails.org/plugin/filterpane

추기 (2015/01/31)


위에 있다
죄송합니다. hasManybelongsTo를 필두로 다른 영역의 속성을 유지하는 데 있어서 검색 표에 항목이 생성되지 않을 것 같습니다.
그렇게 썼지만 그걸 처리할 방법이 준비돼 있어.
최근에 이 점을 종합하여 다시 투고할 것이다.

좋은 웹페이지 즐겨찾기