আপনি কি আমাকে এই কোডটির বসন্তের এমভিসি স্টাইলের এনালগ লিখতে সহায়তা করতে পারেন?
session.setAttribute("name","value");
এবং @ModelAttribute
সেশনটিতে টীকা দ্বারা টীকাযুক্ত কোনও উপাদান কীভাবে যুক্ত করা যায় এবং তারপরে অ্যাক্সেস পাওয়া যায়?
আপনি কি আমাকে এই কোডটির বসন্তের এমভিসি স্টাইলের এনালগ লিখতে সহায়তা করতে পারেন?
session.setAttribute("name","value");
এবং @ModelAttribute
সেশনটিতে টীকা দ্বারা টীকাযুক্ত কোনও উপাদান কীভাবে যুক্ত করা যায় এবং তারপরে অ্যাক্সেস পাওয়া যায়?
উত্তর:
আপনি যদি প্রতিটি প্রতিক্রিয়ার পরে অবজেক্টটি মুছতে চান তবে আপনার সেশনটির প্রয়োজন হবে না,
আপনি যদি ব্যবহারকারী সেশনের সময় অবজেক্ট রাখতে চান তবে কিছু উপায় রয়েছে:
সেশনে সরাসরি একটি বৈশিষ্ট্য যুক্ত করুন:
@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
যে অধিবেশন ক্লাস রাখে।
এওপি প্রক্সি ইনজেকশন: বসন্ত-এক্সএমএল:
<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. পদ্ধতিতে HTTP সেশন পাস করুন:
String index(HttpSession session) {
session.setAttribute("mySessionAttribute", "someValue");
return "index";
}
@. সেশনটিতে মডেলঅ্যাট্রিবিউট তৈরি করুন @ সেশনঅ্যাট্রিবিউটস ("শপিংকার্ট") দ্বারা:
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
}
}
প্রত্যেকেরই সুবিধা এবং অসুবিধা রয়েছে:
@ অ্যাসেসন ক্লাউড সিস্টেমে আরও মেমরি ব্যবহার করতে পারে এটি সমস্ত নোডে সেশনটি অনুলিপি করে এবং সরাসরি পদ্ধতিতে (1 এবং 5) অগোছালো দৃষ্টিভঙ্গি রাখে, ইউনিট পরীক্ষা করা ভাল নয় not
সেশন জেএসপি অ্যাক্সেস করতে
<%=session.getAttribute("ShoppingCart.prop")%>
জেএসটিএল:
<c:out value="${sessionScope.ShoppingCart.prop}"/>
থাইমালিফে:
<p th:text="${session.ShoppingCart.prop}" th:unless="${session == null}"> . </p>
User
শিমের ইনজেকশনটি কেবল তখনই কাজ করবে যদি আপনি session
বিনকে user
কোনও ক্লাসে ডাকে থকেও বাদ দেওয়া হয়, অন্যথায় যদি কোনও সেশন উপস্থিত না থাকে তবে এটি ব্যতিক্রম ছুঁড়ে দেয় কারণ আমরা যখন বিনকে অন্য একটি ইনজেকশনে ইনজেকশন দেই তখন @ রনটাইম প্রসঙ্গে কোনও সক্রিয় অধিবেশন থাকবে না। !!
ব্যবহার @SessionAttributes
দস্তাবেজগুলি দেখুন: অনুরোধের মধ্যে এইচটিটিপি সেশনে মডেল বৈশিষ্ট্যগুলি সংরক্ষণ করতে @ সেশনঅ্যাট্রিবিউটস ব্যবহার করে
" স্প্রিং এমভিসি মডেল এবং সেশন অ্যাট্রিবিউটগুলি বোঝা " এছাড়াও স্প্রিং এমভিসি সেশনগুলির একটি খুব ভাল ওভারভিউ দেয় এবং ব্যাখ্যা করে যে কীভাবে / কখন @ModelAttribute
সেশনে স্থানান্তরিত হয় (যদি নিয়ামকটি @SessionAttributes
টিকা দেওয়া হয়)।
এই নিবন্ধটি আরও ব্যাখ্যা করে যে @SessionAttributes
সরাসরি এইচটিটিপসেশনটিতে অ্যাট্রিবিউট সেট করার পরিবর্তে মডেলটি ব্যবহার করা আরও ভাল কারণ এটি স্প্রিং এমভিসি-কে অজগনস্টিক হতে সহায়তা করে।
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";
}
}
জেএসপি ব্যবহারে একই অ্যাক্সেস করতে
${sessionScope.name}
।
জন্য @ModelAttribute
এই দেখতে লিংক
এটি কি সবচেয়ে সহজ এবং সংক্ষিপ্ততম নয় ? আমি এটি জানতাম এবং কেবল এটি পরীক্ষা করেছি - এখানে নিখুঁতভাবে কাজ করা:
@GetMapping
public String hello(HttpSession session) {
session.setAttribute("name","value");
return "hello";
}
PS আমি এখানে " স্প্রিং-এমভিসি তে সেশন বৈশিষ্ট্যগুলি কীভাবে ব্যবহার করতে পারি " এর উত্তর অনুসন্ধান করতে এসেছি, তবে আমি আমার কোডটিতে লিখেছি এমনটি সবচেয়ে স্পষ্ট না দেখে অনেকগুলি পড়ি read আমি এটি দেখতে পেলাম না, তাই আমি এটির ভুল বলে মনে করেছি, তবে এটি এটি ছিল না। সুতরাং সেই প্রশ্নের জ্ঞানটি মূল প্রশ্নের সহজ সমাধানের সাথে ভাগ করে নেওয়া যাক।
এটা চেষ্টা কর...
@Controller
@RequestMapping("/owners/{ownerId}/pets/{petId}/edit")
@SessionAttributes("pet")
public class EditPetForm {
@ModelAttribute("types")
public Collection<PetType> populatePetTypes() {
return this.clinic.getPetTypes();
}
@RequestMapping(method = RequestMethod.POST)
public String processSubmit(@ModelAttribute("pet") Pet pet,
BindingResult result, SessionStatus status) {
new PetValidator().validate(pet, result);
if (result.hasErrors()) {
return "petForm";
}else {
this.clinic.storePet(pet);
status.setComplete();
return "redirect:owner.do?ownerId="
+ pet.getOwner().getId();
}
}
}
আমি যখন আমার লগইনটিতে (যা একটি বুটস্ট্র্যাপ মডেল) চেষ্টা করার চেষ্টা করছিলাম, তখন আমি @ অ্যাসিশনঅ্যাট্রিবিউট টীকাটি ব্যবহার করেছি। তবে সমস্যাটি তখন ছিল যখন ভিউটি পুনঃনির্দেশিত ("পুনর্নির্দেশ: / হোম"), ইউআরএলের সেশন শোতে আমি প্রবেশ করা মানগুলি। কিছু ইন্টারনেট উত্স http://docs.spring.io/spring/docs/4.3.x/spring-framework-references/htmlsingle/#mvc-redirecting অনুসরণ করার পরামর্শ দেয় তবে আমি পরিবর্তে এইচটিটিপিএসশন ব্যবহার করেছি। আপনি ব্রাউজারগুলি বন্ধ না করা পর্যন্ত এই অধিবেশনটি উপস্থিত থাকবে। এখানে নমুনা কোড
@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>
লগইন করার পরে আপনার ওয়েবসাইটের যে কোনও জায়গায় উপরের কোডগুলি যুক্ত করুন। সেশনটি সঠিকভাবে সেট করা থাকলে আপনি সেখানে মানগুলি দেখতে পাবেন। আপনি সঠিকভাবে জেএসটিএল ট্যাগ এবং এল-এক্সপ্রেশন যুক্ত করেছেন তা নিশ্চিত করুন (এখানে jstl ট্যাগ সেট করার লিঙ্কটি https://menukablog.wordpress.com/2016/05/10/add-jstl-tab-library-to-you-pro- সঠিকভাবে / )
এই পদ্ধতিটি ব্যবহার করুন খুব সহজেই ব্যবহার করা সহজ
HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getNativeRequest();
request.getSession().setAttribute("errorMsg", "your massage");
jsp এ একবার ব্যবহার করুন তারপর অপসারণ
<c:remove var="errorMsg" scope="session"/>
স্প্রিং 4 ওয়েব এমভিসি। আপনি নিয়ামক স্তরের @SessionAttribute
সাথে পদ্ধতিতে ব্যবহার করতে পারেন@SessionAttributes
@Controller
@SessionAttributes("SessionKey")
public class OrderController extends BaseController {
GetMapping("/showOrder")
public String showPage(@SessionAttribute("SessionKey") SearchCriteria searchCriteria) {
// method body
}