From 740324a4042948577d4acde9426c31b90d931cdb Mon Sep 17 00:00:00 2001 From: senju Date: Thu, 20 Aug 2009 00:25:40 +0900 Subject: [PATCH] =?utf8?q?=E3=83=A1=E3=83=B3=E3=83=90=E3=83=BC=E6=A4=9C?= =?utf8?q?=E7=B4=A2=E3=82=92=E8=BF=BD=E5=8A=A0=E3=80=82=E3=81=82=E3=81=A8?= =?utf8?q?=E8=8B=A5=E5=B9=B2=E3=81=AE=E3=83=90=E3=82=B0=E4=BF=AE=E6=AD=A3?= =?utf8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit メンバー検索はニックネームでの検索のみ。 エラーページがポストの時表示されないのを修正。 インターセプターがヌルポで落ちる可能性があるのを修正。 --- .../rabbitBTS/controllers/IndexController.java | 2 +- .../rabbitBTS/controllers/MembersController.java | 65 ++++++++++++++++++++++ .../rabbitBTS/forms/MemberSearchForm.java | 39 +++++++++++++ .../interceptors/AuthenticationInterceptor.java | 13 +++-- .../rabbitBTS/interceptors/CSRFInterceptor.java | 10 ++-- .../rabbitBTS/services/AccountService.java | 13 +++++ war/WEB-INF/messages.xml | 3 + war/WEB-INF/views/common/foot.ftl | 6 +- war/WEB-INF/views/members/index.ftl | 29 ++++++++++ war/st/common.css | 9 +++ 10 files changed, 177 insertions(+), 12 deletions(-) create mode 100644 src/jp/sourceforge/rabbitBTS/controllers/MembersController.java create mode 100644 src/jp/sourceforge/rabbitBTS/forms/MemberSearchForm.java create mode 100644 war/WEB-INF/views/members/index.ftl diff --git a/src/jp/sourceforge/rabbitBTS/controllers/IndexController.java b/src/jp/sourceforge/rabbitBTS/controllers/IndexController.java index 7ddc25d..244dfb8 100644 --- a/src/jp/sourceforge/rabbitBTS/controllers/IndexController.java +++ b/src/jp/sourceforge/rabbitBTS/controllers/IndexController.java @@ -27,7 +27,7 @@ public final class IndexController extends BaseController implements public void index() { } - @RequestMapping(method = RequestMethod.GET, value = "/error404.html") + @RequestMapping(value = "/error404.html") public void error404() { } diff --git a/src/jp/sourceforge/rabbitBTS/controllers/MembersController.java b/src/jp/sourceforge/rabbitBTS/controllers/MembersController.java new file mode 100644 index 0000000..bd31984 --- /dev/null +++ b/src/jp/sourceforge/rabbitBTS/controllers/MembersController.java @@ -0,0 +1,65 @@ +/* + Copyright 2009 senju@users.sourceforge.jp + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +package jp.sourceforge.rabbitBTS.controllers; + +import java.util.ArrayList; +import java.util.List; + +import jp.sourceforge.rabbitBTS.forms.MemberSearchForm; +import jp.sourceforge.rabbitBTS.models.Account; +import jp.sourceforge.rabbitBTS.services.AccountService; + +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +/** + * メンバー検索/管理操作用コントローラ + */ +@Controller +public class MembersController extends BaseController implements IController { + @Autowired + private AccountService accountService; + + /** + * メンバー一覧画面 + */ + @RequestMapping(method = RequestMethod.GET) + public void index(MemberSearchForm form, BindingResult result, ModelMap map) { + // フォームが空の場合 + if (StringUtils.isEmpty(form.getNickName())) { + final List accList = this.accountService.fetchAccounts(); + map.addAttribute("accounts", accList); + return; + } + // TODO:他の条件が入った場合修正 + final Account account = this.accountService.fetchAccountByNickName(form + .getNickName()); + final List accList = new ArrayList(1); + map.addAttribute("accounts", accList); + if (account == null) { + result.reject("account.not.found"); + } else { + accList.add(account); + } + } + +} diff --git a/src/jp/sourceforge/rabbitBTS/forms/MemberSearchForm.java b/src/jp/sourceforge/rabbitBTS/forms/MemberSearchForm.java new file mode 100644 index 0000000..04329fd --- /dev/null +++ b/src/jp/sourceforge/rabbitBTS/forms/MemberSearchForm.java @@ -0,0 +1,39 @@ +/* + Copyright 2009 senju@users.sourceforge.jp + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +package jp.sourceforge.rabbitBTS.forms; + +/** + * メンバー検索用コマンドオブジェクト + */ +public class MemberSearchForm { + private String nickName; + + /** + * @return the nickName + */ + public String getNickName() { + return this.nickName; + } + + /** + * @param nickName + * the nickName to set + */ + public void setNickName(String nickName) { + this.nickName = nickName; + } +} diff --git a/src/jp/sourceforge/rabbitBTS/interceptors/AuthenticationInterceptor.java b/src/jp/sourceforge/rabbitBTS/interceptors/AuthenticationInterceptor.java index 6b544dd..1b2fc35 100644 --- a/src/jp/sourceforge/rabbitBTS/interceptors/AuthenticationInterceptor.java +++ b/src/jp/sourceforge/rabbitBTS/interceptors/AuthenticationInterceptor.java @@ -25,6 +25,7 @@ import jp.sourceforge.rabbitBTS.exceptions.HasNotValidIdException; import jp.sourceforge.rabbitBTS.models.Account; import jp.sourceforge.rabbitBTS.services.AccountService; +import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; @@ -77,11 +78,13 @@ public class AuthenticationInterceptor extends HandlerInterceptorAdapter { public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView mav) throws Exception { - // リダイレクトする場合は不要 - if (!mav.getViewName().startsWith("redirect:")) { - mav.addObject("acc", this.accountService.getCurrentAccount()); - mav.addObject("loginurl", Sht.loginUrl(request)); - mav.addObject("logouturl", Sht.logoutUrl(request)); + if (mav != null) { + // リダイレクトする場合は不要 + if (!StringUtils.startsWith(mav.getViewName(), "redirect:")) { + mav.addObject("acc", this.accountService.getCurrentAccount()); + mav.addObject("loginurl", Sht.loginUrl(request)); + mav.addObject("logouturl", Sht.logoutUrl(request)); + } } } diff --git a/src/jp/sourceforge/rabbitBTS/interceptors/CSRFInterceptor.java b/src/jp/sourceforge/rabbitBTS/interceptors/CSRFInterceptor.java index d615aef..894f6cc 100644 --- a/src/jp/sourceforge/rabbitBTS/interceptors/CSRFInterceptor.java +++ b/src/jp/sourceforge/rabbitBTS/interceptors/CSRFInterceptor.java @@ -64,10 +64,12 @@ public class CSRFInterceptor extends HandlerInterceptorAdapter { HttpServletResponse response, Object handler, ModelAndView mav) throws Exception { // リダイレクトする場合は不要 - if (!mav.getViewName().startsWith("redirect:")) { - final String token = RandomStringUtils.randomAlphanumeric(128); - request.getSession().setAttribute("secureToken", token); - mav.addObject("secureToken", token); + if (mav != null) { + if (!StringUtils.startsWith(mav.getViewName(), "redirect:")) { + final String token = RandomStringUtils.randomAlphanumeric(128); + request.getSession().setAttribute("secureToken", token); + mav.addObject("secureToken", token); + } } if (request.getMethod().equals("POST") diff --git a/src/jp/sourceforge/rabbitBTS/services/AccountService.java b/src/jp/sourceforge/rabbitBTS/services/AccountService.java index 9eb915e..0038d89 100644 --- a/src/jp/sourceforge/rabbitBTS/services/AccountService.java +++ b/src/jp/sourceforge/rabbitBTS/services/AccountService.java @@ -167,6 +167,19 @@ public class AccountService { } /** + * アカウントを取得する。 TODO: LastAccess順でソート、件数制限、ページング + * + * @return 取得したアカウントのリスト + */ + @SuppressWarnings("unchecked") + public List fetchAccounts() { + final PersistenceManager pm = PMF.get().getPersistenceManager(); + final List accList = (List) pm + .newQuery(Account.class).execute(); + return accList; + } + + /** * @return the firstSuperUser */ public String getFirstSuperUser() { diff --git a/war/WEB-INF/messages.xml b/war/WEB-INF/messages.xml index ac35914..96a9a97 100644 --- a/war/WEB-INF/messages.xml +++ b/war/WEB-INF/messages.xml @@ -16,4 +16,7 @@ 不正な画面遷移を検出しました。 + +メンバーが見つかりませんでした。他の検索条件をお試しください。 + \ No newline at end of file diff --git a/war/WEB-INF/views/common/foot.ftl b/war/WEB-INF/views/common/foot.ftl index 22365ee..3e6933c 100644 --- a/war/WEB-INF/views/common/foot.ftl +++ b/war/WEB-INF/views/common/foot.ftl @@ -1,8 +1,10 @@ [#ftl] -
- サイドバー +
diff --git a/war/WEB-INF/views/members/index.ftl b/war/WEB-INF/views/members/index.ftl new file mode 100644 index 0000000..9227b4f --- /dev/null +++ b/war/WEB-INF/views/members/index.ftl @@ -0,0 +1,29 @@ +[#ftl] +[#assign title="メンバー検索"] +[#include "/common/head.ftl"] +

メンバー検索

+[@rbts.showGlobalErrors "memberSearchForm" /] +
+ + + + + + +
ニックネーム[@spring.formInput "memberSearchForm.nickName" /][@spring.showErrors "
", "err" /]
+ +
+ + +[#list accounts as member] + + + + + + + + +[/#list] +
ニックネーム最終アクセス時刻
${member.nickName}${member.lastAccess?datetime}
+[#include "/common/foot.ftl"] diff --git a/war/st/common.css b/war/st/common.css index 905e1e4..46186dc 100644 --- a/war/st/common.css +++ b/war/st/common.css @@ -63,7 +63,16 @@ hr { color: red; font-style: italic; } +th { + border-style: solid; + border-width: thin; + text-align: center; +} +td { + border-style: solid; + border-width: thin; +} .bbs th { border-style: solid; border-width: thin; -- 2.11.0