このコードのSpring MVCスタイルのアナログを書くのを手伝ってくれませんか?
session.setAttribute("name","value");
そして、注釈によって@ModelAttribute
注釈が付けられた要素をセッションに追加して、それにアクセスする方法は?
このコードのSpring MVCスタイルのアナログを書くのを手伝ってくれませんか?
session.setAttribute("name","value");
そして、注釈によって@ModelAttribute
注釈が付けられた要素をセッションに追加して、それにアクセスする方法は?
セッションが不要な各応答の後にオブジェクトを削除する場合は、
ユーザーセッション中にオブジェクトを保持したい場合、いくつかの方法があります:
1 つの属性をセッションに直接追加します。
@RequestMapping(method = RequestMethod.GET)
public String testMestod(HttpServletRequest request){
ShoppingCart cart = (ShoppingCart)request.getSession().setAttribute("cart",value);
return "testJsp";
}
次のようにコントローラーから取得できます。
ShoppingCart cart = (ShoppingCart)session.getAttribute("cart");
コントローラーセッションをスコープにする
@Controller
@Scope("session")
オブジェクトのスコープを設定します。たとえば、毎回セッションにある必要があるユーザー オブジェクトがあります。
@Component
@Scope("session")
public class User
{
String user;
/* setter getter*/
}
次に、必要な各コントローラーにクラスを挿入します
@Autowired
private User user
クラスをセッションに保ちます。
AOP プロキシ インジェクション: 春の -xml:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
<bean id="user" class="com.User" scope="session">
<aop:scoped-proxy/>
</bean>
</beans>
次に、必要な各コントローラーにクラスを挿入します
@Autowired
private User user
5. HttpSession をメソッドに渡します。
String index(HttpSession session) {
session.setAttribute("mySessionAttribute", "someValue");
return "index";
}
6.セッションで ModelAttribute を作成する By @SessionAttributes("ShoppingCart"):
public String index (@ModelAttribute("ShoppingCart") ShoppingCart shoppingCart, SessionStatus sessionStatus) {
//Spring V4
//you can modify session status by sessionStatus.setComplete();
}
または、次のようにコントローラー クラス全体にモデルを追加することもできます。
@Controller
@SessionAttributes("ShoppingCart")
@RequestMapping("/req")
public class MYController {
@ModelAttribute("ShoppingCart")
public Visitor getShopCart (....) {
return new ShoppingCart(....); //get From DB Or Session
}
}
それぞれに長所と短所があります。
@session は、セッションをすべてのノードにコピーするクラウド システムでより多くのメモリを使用する可能性があり、直接的な方法 (1 と 5) は面倒なアプローチであるため、単体テストには適していません。
セッション jsp にアクセスするには
<%=session.getAttribute("ShoppingCart.prop")%>
Jstl で:
<c:out value="${sessionScope.ShoppingCart.prop}"/>
タイムリーフで:
<p th:text="${session.ShoppingCart.prop}" th:unless="${session == null}"> . </p>
使用する@SessionAttributes
ドキュメントを参照してください: @SessionAttributes を使用して、リクエスト間の HTTP セッションにモデル属性を保存する
「Spring MVC モデルとセッション属性を理解する」も、Spring MVC セッションの非常に優れた概要を提供し、@ModelAttribute
s がセッションに転送される方法/タイミングを説明します (コントローラーに@SessionAttributes
注釈が付けられている場合)。
@SessionAttributes
この記事では、Spring MVC がビューに依存しないようにするために、HttpSession に属性を直接設定するよりも、モデルで使用する方がよいことも説明しています。
SessionAttribute
アノテーションは、リクエスト オブジェクトからセッションを取得して属性を設定する代わりに、最も単純で簡単です。
コントローラーのモデルに任意のオブジェクトを追加でき、その名前が注釈の引数と一致する場合、セッションに保存されます。@SessionAttributes
以下の例でpersonObj
は、セッションで利用できます。
@Controller
@SessionAttributes("personObj")
public class PersonController {
@RequestMapping(value="/person-form")
public ModelAndView personPage() {
return new ModelAndView("person-page", "person-entity", new Person());
}
@RequestMapping(value="/process-person")
public ModelAndView processPerson(@ModelAttribute Person person) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("person-result-page");
modelAndView.addObject("pers", person);
modelAndView.addObject("personObj", person);
return modelAndView;
}
}
以下の注釈付きコードは、「値」を「名前」に設定します
@RequestMapping("/testing")
@Controller
public class TestController {
@RequestMapping(method = RequestMethod.GET)
public String testMestod(HttpServletRequest request){
request.getSession().setAttribute("name", "value");
return "testJsp";
}
}
JSP で同じものにアクセスするには、 を使用します
${sessionScope.name}
。
については、@ModelAttribute
このリンクを参照してください
Spring 4 Web MVC。コントローラーレベル@SessionAttribute
のメソッドで使用できます@SessionAttributes
@Controller
@SessionAttributes("SessionKey")
public class OrderController extends BaseController {
GetMapping("/showOrder")
public String showPage(@SessionAttribute("SessionKey") SearchCriteria searchCriteria) {
// method body
}
ログイン (ブートストラップ モーダル) を試みるときに、@sessionattributes アノテーションを使用しました。しかし問題は、ビューがリダイレクト (「redirect:/home」) の場合で、セッションに入力した値が URL に表示されます。一部のインターネット ソースでは、http://docs.spring.io/spring/docs/4.3.x/spring-framework-reference/htmlsingle/#mvc-redirectingに従うよう提案されていますが、代わりに HttpSession を使用しました。このセッションは、ブラウザーを閉じるまで存在します。ここにサンプルコードがあります
@RequestMapping(value = "/login")
@ResponseBody
public BooleanResponse login(HttpSession session,HttpServletRequest request){
//HttpServletRequest used to take data to the controller
String username = request.getParameter("username");
String password = request.getParameter("password");
//Here you set your values to the session
session.setAttribute("username", username);
session.setAttribute("email", email);
//your code goes here
}
ビュー側で特定のものを変更することはありません。
<c:out value="${username}"></c:out>
<c:out value="${email}"></c:out>
ログイン後、上記のコードを Web サイトの任意の場所に追加します。セッションが正しく設定されていれば、そこに値が表示されます。jstl タグと El- 式を正しく追加したことを確認します (jstl タグを設定するためのリンクはこちらですhttps://menukablog.wordpress.com/2016/05/10/add-jstl-tab-library-to-you-project-正しく/)
使用方法 この方法は非常にシンプルで使いやすい
HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getNativeRequest();
request.getSession().setAttribute("errorMsg", "your massage");
jspで一度使用してから削除する
<c:remove var="errorMsg" scope="session"/>