@ModelAttribute
স্প্রিং এমভিসির উদ্দেশ্য এবং ব্যবহার কী ?
@ModelAttribute
স্প্রিং এমভিসির উদ্দেশ্য এবং ব্যবহার কী ?
উত্তর:
@ModelAttribute
মডেল অবজেক্টের একটি সম্পত্তি বোঝায় (এমভিসি তে এম;) সুতরাং আমাদের বলুন যে আমাদের একটি ফর্ম ব্যাকিং অবজেক্টের একটি ফর্ম রয়েছে যার নাম "ব্যক্তি" বলা হয় তবে আপনি স্প্রিং এমভিসি @ModelAttribute
এ্যানোটেশন ব্যবহার করে নিয়ন্ত্রণকারী পদ্ধতিতে এই বস্তুকে সরবরাহ করতে পারেন :
public String processForm(@ModelAttribute("person") Person person){
person.getStuff();
}
অন্যদিকে টীকাটি এমন কোনও বস্তুর সংজ্ঞা দিতে ব্যবহৃত হয় যা কোনও মডেলের অংশ হওয়া উচিত। সুতরাং আপনি যদি মডেলটিতে কোনও ব্যক্তির অবজেক্টটি রেফারেন্স করতে চান তবে আপনি নিম্নলিখিত পদ্ধতিটি ব্যবহার করতে পারেন:
@ModelAttribute("person")
public Person getPerson(){
return new Person();
}
এই বর্ণিত পদ্ধতিটি আপনার দর্শনটিতে ব্যক্তি অবজেক্টে অ্যাক্সেসের অনুমতি দেবে, কারণ এটি স্প্রিংয়ের মাধ্যমে মডেলগুলিতে স্বয়ংক্রিয়ভাবে যুক্ত হয়।
"@ মডেলঅ্যাট্রিবিউট ব্যবহার" দেখুন ।
@ModelAttribute
আপনার প্রথম ক্ষেত্রে আপনার দরকার নেই ।
@ModelAttribute
পদ্ধতির গুণাবলী ব্যবহার করতে হবে ?
আমি জানি এটি একটি পুরানো থ্রেড, তবে আমি ভেবেছিলাম আমি আমার টুপিটি রিংয়ে ফেলেছি এবং দেখি যে আমি জলকে আরও কিছুটা কাদা দিতে পারি কিনা :)
আমি দেখতে পেয়েছি যে আমার প্রাথমিক সংগ্রামটি @ModelAttribute
বসন্তের একাধিক টীকা একত্রিত করার সিদ্ধান্তের ফলাফল। আমি এটি আরও কয়েকটি ছোট টীকায় বিভক্ত হয়ে গেলে এটি আরও স্পষ্ট হয়ে উঠল:
প্যারামিটার টীকাগুলির জন্য, @ModelAttribute
এর সমতুল্য হিসাবে ভাবেন@Autowired + @Qualifier
এটি স্প্রিং পরিচালিত মডেল থেকে প্রদত্ত নাম সহ একটি শিম পুনরুদ্ধার করার চেষ্টা করে। যদি নামযুক্ত শিমটি পাওয়া যায় না, ত্রুটি ছুঁড়ে ফেলার বা ফিরে আসার পরিবর্তে null
এটি স্পষ্টতই @Bean
অর্থাত্ ডিফল্ট কনস্ট্রাক্টর ব্যবহার করে একটি নতুন উদাহরণ তৈরি করুন এবং শিমটি মডেলটিতে যুক্ত করুন।
পদ্ধতির টীকাগুলির জন্য, ভাবেন @ModelAttribute
এর সমতুল্য হিসাবে@Bean + @Before
, অর্থাত্ এটি মডেলটিতে ব্যবহারকারীর কোড দ্বারা নির্মিত শিমটি রাখে এবং এটি সর্বদা একটি অনুরোধ পরিচালনার পদ্ধতির আগে ডাকা হয়।
রূপকভাবে, আমি @ModelAttribute
নিম্নলিখিত হিসাবে দেখছি (দয়া করে এটি আক্ষরিকভাবে গ্রহণ করবেন না !!):
@Bean("person")
@Before
public Person createPerson(){
return new Person();
}
@RequestMapping(...)
public xxx handlePersonRequest( (@Autowired @Qualifier("person") | @Bean("person")) Person person, xxx){
...
}
আপনি দেখতে পাচ্ছেন, স্প্রিং @ModelAttribute
একটি সর্ব-সংবেদী টীকা দেওয়ার সঠিক সিদ্ধান্ত নিয়েছিল ; কেউ এন্টোটেশন স্মর্গাসর্ড দেখতে চায় না।
@Scope("request")
তখন যোগ করুন :)
আমার স্টাইলের জন্য, আমি সবসময় @ মডেলঅ্যাট্রিবিউটটি স্প্রিং ফর্ম jsp থেকে অবজেক্টটি ধরতে ব্যবহার করি। উদাহরণস্বরূপ, আমি jsp পৃষ্ঠায় ফর্ম ডিজাইন করি, সেই ফর্মটি কমান্ডনেমের সাথে উপস্থিত রয়েছে
<form:form commandName="Book" action="" methon="post">
<form:input type="text" path="title"></form:input>
</form:form>
এবং আমি নিয়ন্ত্রণ কোডের সাথে অনুসরণ কোড সহ বস্তুটি ধরি
public String controllerPost(@ModelAttribute("Book") Book book)
এবং বইয়ের প্রতিটি ক্ষেত্রের নামটি অবশ্যই ফর্মের উপ-উপাদানটির সাথে মিল থাকা উচিত match
catch
ক্রিয়া ঠিক কাজ যে বর্ণনা @ModelAttribute
করেছেন। খুশী হলাম।
তাই আমি এটিকে সহজ উপায়ে ব্যাখ্যা করার চেষ্টা করব। আসুন:
public class Person {
private String name;
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
}
স্প্রিং এমভিসি ডকুমেন্টেশনে বর্ণিত হিসাবে - @ মডেলঅ্যাট্রিবিউট টীকাগুলি পদ্ধতিতে বা পদ্ধতির যুক্তিতে ব্যবহার করা যেতে পারে । এবং অবশ্যই আমরা উভয় একই কন্ট্রোলারে একই সময়ে ব্যবহার করতে পারি।
1. মেথড টীকা
@ModelAttribute(“cities”)
public List<String> checkOptions(){
return new Arrays.asList(new[]{“Sofia”,”Pleven","Ruse”});//and so on
}
এই জাতীয় পদ্ধতির উদ্দেশ্য হ'ল মডেলটিতে অ্যাট্রিবিউট যুক্ত করা। সুতরাং আমাদের ক্ষেত্রে শহরগুলির কীটির মডেলটির new Arras.asList(new[]{“Sofia”,”Pleven","Ruse”})
মান হিসাবে তালিকা থাকবে (আপনি মডেলটিকে মানচিত্র হিসাবে মনে করতে পারেন (কী: মান))। @ নিয়ামকটিতে মডেলঅ্যাট্রিবিউট পদ্ধতিগুলি @ রিকোয়েস্টম্যাপিংয়ের আগে ডাকা হয় পদ্ধতি, একই নিয়ামক মধ্যে।
এখানে আমরা মডেল সাধারণ তথ্য যুক্ত করতে চাই যা ব্যবহারকারীর কাছে প্রদর্শন করতে ফর্মটিতে ব্যবহৃত হবে। উদাহরণস্বরূপ এটি একটি এইচটিএমএল নির্বাচন পূরণ করতে ব্যবহৃত হতে পারে:
2.Modod তর্ক
public String findPerson(@ModelAttriute(value="person") Person person) {
//..Some logic with person
return "person.jsp";
}
কোনও পদ্ধতির আর্গুমেন্টে একটি @ মডেলঅ্যাট্রিবিউট নির্দেশ করে যে মডেল থেকে আর্গুমেন্টটি পুনরুদ্ধার করা উচিত। সুতরাং এই ক্ষেত্রে আমরা প্রত্যাশা করি যে আমাদের কাছে মডেল ব্যক্তির কী হিসাবে বস্তু রয়েছে এবং আমরা এর মান পেতে এবং এটি পদ্ধতি পদ্ধতির কাছে ব্যক্তির কাছে রাখতে চাই । যদি এগুলি বিদ্যমান না থাকে বা (কখনও কখনও আপনি ভুল মান (মান = "পারসন")) তবে স্প্রিং মডেলটিতে এটি খুঁজে পাবে না এবং এটির ডিফল্টগুলি ব্যবহার করে খালি ব্যক্তি বস্তু তৈরি করবে। তারপরে অনুরোধের প্যারামিটারগুলি নেবে এবং তাদের নাম ব্যবহার করে পার্সোন অবজেক্টে তাদের ডেটা বেঁধে দেওয়ার চেষ্টা করবে।
name="Dmitrij"&countries=Lesoto&sponsor.organization="SilkRoad"&authorizedFunds=&authorizedHours=&
সুতরাং আমাদের নাম আছে এবং এটি সেটনাম (স্ট্রিং নাম) ব্যবহার করে পার্সন.নামের সাথে আবদ্ধ হবে। তাই ভিতরে
//..Some logic with person
"দিমিত্রিজ" মান সহ আমাদের এই পূর্ণ নামটিতে অ্যাক্সেস রয়েছে।
অবশ্যই স্প্রিং আরও জটিল বস্তুর মতো তালিকা, মানচিত্র, মানচিত্রের সেটগুলির তালিকা ইত্যাদির সাথে আবদ্ধ হতে পারে তবে দৃশ্যের পিছনে এটি ডেটাটিকে বাধ্যতামূলক যাদু করে তোলে।
আমাদের কাছে একই সাথে মডেল টীকাযুক্ত পদ্ধতি থাকতে পারে এবং যুক্তিগুলিতে @ মডেলঅ্যাট্রিবিউটের সাথে পদ্ধতি হ্যান্ডলারটি অনুরোধ করতে পারে। তারপরে আমাদের বিধি বিধান করতে হবে।
অবশ্যই আমাদের প্রচুর পরিস্থিতি রয়েছে - @ মডেলএট্রিবিউট পদ্ধতিগুলি একটি @ সংযোজনকারী অ্যাডভাইসস এবং আরও অনেক কিছুতে সংজ্ঞায়িত করা যায় ...
আমি জানি আমি পার্টিতে দেরি করে ফেলেছি, তবে তারা যেমন বলেছে "" আগের চেয়ে বেশি দেরি হয়ে যাও "এর মতো উদ্ধৃতি দেব। সুতরাং আসুন আমরা যাই, প্রত্যেকের কাছে বিষয়গুলি ব্যাখ্যা করার নিজস্ব উপায় আছে, আমাকে এটির সংক্ষেপে চেষ্টা করার চেষ্টা করুন এবং উদাহরণ সহ কয়েকটি পদক্ষেপে এটি আপনার জন্য সহজ করে তুলব; মনে করুন আপনার একটি সাধারণ ফর্ম, form.jsp রয়েছে
<form:form action="processForm" modelAttribute="student">
First Name : <form:input path="firstName" />
<br><br>
Last Name : <form:input path="lastName" />
<br><br>
<input type="submit" value="submit"/>
</form:form>
পাথ = "ফার্স্টনাম" পাথ = "লাস্টনাম" এগুলি স্টুডেন্ট ক্লাসের ক্ষেত্র / বৈশিষ্ট্যগুলি যখন ফর্মটি তাদের গ্রাহক বলা হয় তবে একবার তাদের সেটারগুলি কল করা হয় এবং তাদের মানগুলি বিনে সেট করা হয় যা মডেলঅ্যাট্রিবিউট = এ নির্দেশিত হয়েছিল an ফর্ম ট্যাগে "ছাত্র"
আমাদের স্টুডেন্ট কন্ট্রোলার রয়েছে যাতে নিম্নলিখিত পদ্ধতিগুলি অন্তর্ভুক্ত থাকে;
@RequestMapping("/showForm")
public String showForm(Model theModel){ //Model is used to pass data between
//controllers and views
theModel.addAttribute("student", new Student()); //attribute name, value
return "form";
}
@RequestMapping("/processForm")
public String processForm(@ModelAttribute("student") Student theStudent){
System.out.println("theStudent :"+ theStudent.getLastName());
return "form-details";
}
//@ModelAttribute("student") Student theStudent
//Spring automatically populates the object data with form data all behind the
//scenes
এখন অবশেষে আমাদের একটি ফর্ম-Details.jsp আছে
<b>Student Information</b>
${student.firstName}
${student.lastName}
সুতরাং প্রশ্নটিতে ফিরে আসুন স্প্রিং এমভিসিতে @ মডেলঅ্যাট্রিবিউট কী? তোমার জন্য উৎস থেকে একটি নমুনা সংজ্ঞা, http://www.baeldung.com/spring-mvc-and-the-modelattribute-annotation @ModelAttribute একটি টীকা যে শুশ্রূষা একটি পদ্ধতি প্যারামিটার বা নামে মডেল অ্যাট্রিবিউট করতে পদ্ধতি ফেরত মান এবং তারপরে এটি একটি ওয়েব ভিউতে প্রকাশ করে।
আসলে যা ঘটে তা হ'ল এটি আপনার ফর্মের যাবতীয় মূল্যবোধগুলি জমা দিয়েছিল এবং তারপরে সেগুলি আপনার কাছে আবদ্ধ করে রাখা বা অবজেক্টে নির্ধারিত করার জন্য এটি ধারণ করে। এটি @RequestParameter এর মতো কাজ করে যেখানে আমরা কেবলমাত্র একটি প্যারামিটার পাই এবং কোনও ক্ষেত্রে মান নির্ধারণ করি। কেবলমাত্র পার্থক্য হল @ মডেলঅ্যাট্রিবিউটে একক প্যারামিটারের পরিবর্তে সমস্ত ফর্ম ডেটা রয়েছে। এটি আপনার জন্য একটি মটরশুটি তৈরি করে যা পরবর্তী সময়ে বিকাশকারীদের দ্বারা ফর্ম জমা দেওয়া ডেটা ধারণ করে।
পুরো জিনিস পুনরুদ্ধার করতে। পদক্ষেপ 1: একটি অনুরোধ প্রেরণ করা হয় এবং আমাদের পদ্ধতি শোফর্ম চলমান এবং একটি মডেল, একটি অস্থায়ী শিমের নাম নামের শিক্ষার্থী ফর্মটিতে ফরোয়ার্ড করা হয়। theModel.addAttribute ("ছাত্র", নতুন ছাত্র ());
পদক্ষেপ 2: মডেলঅ্যাট্রিবিউট = ফর্ম জমা দেওয়ার মডেলটিতে "শিক্ষার্থী" শিক্ষার্থীর পরিবর্তন করে এবং এখন এটি ফর্মের সমস্ত পরামিতি ধারণ করে
পদক্ষেপ 3: @ মডেলঅ্যাট্রিবিউট ("ছাত্র") শিক্ষার্থী স্টুডেন্ট আমরা @ মডেলঅ্যাট্রিবিউটের হাতে থাকা মানগুলি নিয়ে আসি এবং পুরো শিম / অবজেক্টটি শিক্ষার্থীকে অর্পণ করি।
পদক্ষেপ 4: এবং তারপরে আমরা এটি যেমনটি बोलছিলাম ঠিক তেমন পৃষ্ঠাতে প্রদর্শন করার মতো করে ব্যবহার করি
আমি আশা করি এটি ধারণাটি বুঝতে আপনাকে সহায়তা করে। ধন্যবাদ
Gmail বা ফেসবুক বা ইনস্টাগ্রাম বা অন্য কোনও ওয়েব অ্যাপ্লিকেশনই হোক না কেন কোনও ওয়েব অ্যাপ্লিকেশন নিন, এগুলি শেষ ব্যবহারকারী এবং অ্যাপ্লিকেশন বা ইউআই এবং পিছনের শেষ অ্যাপ্লিকেশনের মধ্যে ডেটা বা তথ্য আদান-প্রদান সম্পর্কে about এমনকি স্প্রিং এমভিসি বিশ্বে ডেটা আদান প্রদানের দুটি উপায় রয়েছে:
আমরা এখানে যা আগ্রহী তা হ'ল ইউআই থেকে নিয়ন্ত্রণকারীর কাছে ডেটা কীভাবে প্রেরণ করা হয়। এটি 2 উপায়েও করা যেতে পারে:
এইচটিএমএল ফর্ম ব্যবহার করে: নীচের পরিস্থিতি বিবেচনা করুন,
যখন আমরা ওয়েব ব্রাউজার থেকে ফর্ম ডেটা জমা করি তখন আমরা আমাদের নিয়ন্ত্রণকারীর ক্লাসে সেই ডেটাটিকে একটি অবজেক্ট হিসাবে অ্যাক্সেস করতে পারি। যখন আমরা কোনও এইচটিএমএল ফর্ম জমা দেই, তখন স্প্রিং কনটেইনার চারটি কাজ করে। এটা হবে,
এই পুরো জিনিসটি কাজে লাগানোর জন্য আমাদের কয়েকটি পদক্ষেপ অনুসরণ করতে হবে।
আমাদের প্রথমে ব্যবহারকারীর মতো একটি মডেল শ্রেণি নির্ধারণ করতে হবে, যেখানে ক্ষেত্রের সংখ্যাটি এইচটিএমএল আকারে ক্ষেত্রের সংখ্যার সাথে ঠিক মিলে যায়। এছাড়াও, আমরা এইচটিএমএল আকারে যে নামগুলি ব্যবহার করি সেগুলির সাথে জাভা ক্লাসে থাকা আমাদের নামগুলির সাথে মিল পাওয়া উচিত। এই দুটি খুব গুরুত্বপূর্ণ। নামগুলি মিলবে, ফর্মের ক্ষেত্রের সংখ্যাটি আমরা তৈরি করা ক্লাসে ক্ষেত্রের সংখ্যার সাথে মেলে। একবার আমরা এটি করার পরে, ধারক স্বয়ংক্রিয়ভাবে উপস্থিত ডেটাগুলি পড়বে, এই মডেলটির একটি অবজেক্ট তৈরি করে, মানগুলি সেট করে এবং এটি এটি নিয়ামকের হাতে দেয়। কন্ট্রোলারের মধ্যে থাকা এই মানগুলি পড়তে আমরা @ মডেলঅ্যাট্রিবিউট ব্যবহার করিপদ্ধতি পরামিতিগুলিতে টিকা। যখন আমরা কন্ট্রোলারে পদ্ধতিগুলি তৈরি করি, আমরা @ মডেলঅ্যাট্রিবিউট ব্যবহার করতে যাচ্ছি এবং এতে একটি পরামিতি যুক্ত করব যা কনটেইনার দ্বারা প্রদত্ত এই বস্তুটি স্বয়ংক্রিয়ভাবে আসবে।
কোনও ব্যবহারকারীকে নিবন্ধ করার জন্য একটি উদাহরণ কোড এখানে দেওয়া হয়েছে:
@RequestMapping(value = "registerUser", method = RequestMethod.POST)
public String registerUser(@ModelAttribute("user") User user, ModelMap model) {
model.addAttribute("user", user);
return "regResult";
}
আশা করি এই চিত্রের ব্যাখ্যাটি সাহায্য করেছে!
এটি বসন্তে ডেটা বাঁধাইয়ের উদ্দেশ্যে ব্যবহৃত হয় MVC
। আপনার একটি ফর্ম উপাদান যেমন একটি জেএসপি থাকা যাক যেমন
চালু
JSP
<form:form action="test-example" method="POST" commandName="testModelAttribute"> </form:form>
(স্প্রিং ফর্ম পদ্ধতি, সরল ফর্ম উপাদানও ব্যবহার করা যেতে পারে)
কন্ট্রোলার সাইডে
@RequestMapping(value = "/test-example", method = RequestMethod.POST)
public ModelAndView testExample(@ModelAttribute("testModelAttribute") TestModel testModel, Map<String, Object> map,...) {
}
এখন আপনি যখন ফর্মটি জমা দেবেন তখন ফর্মের ক্ষেত্রগুলির মানগুলি আপনার জন্য উপলব্ধ।
@ মডেলএট্রিবিউটটি পদ্ধতি আর্গুমেন্ট / পরামিতি হিসাবে বা পদ্ধতি ঘোষণার আগে ব্যবহার করা যেতে পারে। অনুরোধের পরামিতিগুলি বা মডেল অবজেক্টের সাথে ক্ষেত্র গঠনের জন্য এই টীকাটির প্রাথমিক উদ্দেশ্য
@ModelAttribute
(@ModelAttribute("Testing") Test test) as Testing
প্রদত্ত উদাহরণে আপনার দ্বারা নির্দিষ্ট করা নামটির সাথে একটি বৈশিষ্ট্য তৈরি করবে , শিমের পরীক্ষা হচ্ছে শিমের পরীক্ষা এবং টেস্টিং মডেলটিতে উপলভ্য হবে যাতে আপনি এটি সংরক্ষণ করে থাকা মানগুলি পুনরুদ্ধারের জন্য jsp পৃষ্ঠাগুলিতে আরও ব্যবহার করতে পারবেন আপনি ModelAttribute
।
@ মোডেলএট্রিবিউট কন্ট্রোলার ক্লাসে আমাদের যুক্তি সম্পাদনের জন্য jsp ক্ষেত্রগুলি থেকে পজো ক্যালসকে কেবল মানটির সাথে বেঁধে রাখে। আপনি যদি স্ট্রুটগুলির সাথে পরিচিত হন, তবে এটি জমা দেওয়ার পরে ফোর্বিয়ান অবজেক্টটি বসানোর মতো।
মডেলএট্রিবিউট টিকাটি একটি স্প্রিং এমভিসি ওয়েব অ্যাপ্লিকেশনটির অংশ হিসাবে ব্যবহৃত হয় এবং দুটি পরিস্থিতিতে ব্যবহার করা যেতে পারে।
প্রথমত, এটি প্রাক জেএসপি লোড মডেলটিতে ডেটা ইনজেক্ট করতে ব্যবহার করা যেতে পারে। এটি জাসপকে সমস্ত ডেটা নিজেই প্রদর্শন করার প্রয়োজন হয় তা নিশ্চিত করার ক্ষেত্রে এটি বিশেষভাবে কার্যকর। মডেলটির সাথে একটি পদ্ধতি সংযুক্ত করে একটি ইঞ্জেকশন পাওয়া যায়।
দ্বিতীয়ত, এটি কোনও বিদ্যমান মডেল থেকে ডেটা পড়তে এবং কোচের পদ্ধতির পরামিতিগুলিতে নির্ধারণের জন্য ব্যবহার করা যেতে পারে।
রেফারেন্স https://dzone.com/articles/using-spring-mvc%E2%80%99s
পদ্ধতি স্তরে
1. যখন টীকাগুলিটি পদ্ধতি স্তরে ব্যবহৃত হয় তখন সে পদ্ধতির উদ্দেশ্যটি এক বা একাধিক মডেল বৈশিষ্ট্য যুক্ত করা নির্দেশ করে
@ModelAttribute
public void addAttributes(Model model) {
model.addAttribute("india", "india");
}
পদ্ধতিটি আর্গুমেন্টে 1. যখন কোনও পদ্ধতি আর্গুমেন্ট হিসাবে ব্যবহৃত হয়, এটি নির্দেশ করে যে আর্গুমেন্টটি মডেল থেকে পুনরুদ্ধার করা উচিত। যখন উপস্থিত না থাকে এবং প্রথমে তাত্ক্ষণিকভাবে যুক্ত হওয়া উচিত এবং তারপরে মডেলটিতে যুক্ত হওয়া এবং একবার মডেলটিতে উপস্থিত হওয়া উচিত, আর্গুমেন্ট ক্ষেত্রগুলি সমস্ত অনুরোধ পরামিতি থেকে পপ করা উচিত যা নামের সাথে মিলে যায় তাই, এটি বিনের সাথে ফর্মের ডেটা বেঁধে রাখে।
@RequestMapping(value = "/addEmployee", method = RequestMethod.POST)
public String submit(@ModelAttribute("employee") Employee employee) {
return "employeeView";
}