আমি স্প্রিং এমভিসিতে ডেটা বাঁধাই ও রূপান্তর করার সবচেয়ে সহজ এবং সহজ উপায়টি খুঁজছি। যদি সম্ভব হয় তবে কোনও এক্সএমএল কনফিগারেশন না করে।
এখনও অবধি আমি এর মতো প্রপার্টি এডিটর ব্যবহার করছি :
public class CategoryEditor extends PropertyEditorSupport {
// Converts a String to a Category (when submitting form)
@Override
public void setAsText(String text) {
Category c = new Category(text);
this.setValue(c);
}
// Converts a Category to a String (when displaying form)
@Override
public String getAsText() {
Category c = (Category) this.getValue();
return c.getName();
}
}
এবং
...
public class MyController {
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(Category.class, new CategoryEditor());
}
...
}
এটি সহজ: উভয় রূপান্তর একই শ্রেণিতে সংজ্ঞায়িত করা হয়, এবং বাঁধাই সোজা is আমি যদি আমার সমস্ত কন্ট্রোলারগুলিতে একটি সাধারণ বাঁধাই করতে চাইতাম তবে আমি আমার এক্সএমএল কনফিগারেশনে 3 টি লাইন যুক্ত করতে পারতাম ।
কিন্তু স্প্রিং 3.x রূপান্তরকারীদের ব্যবহার করে এটি করার একটি নতুন উপায় প্রবর্তন করেছে :
একটি স্প্রিং পাত্রে, এই সিস্টেমটি প্রপার্টি এডিটরের বিকল্প হিসাবে ব্যবহার করা যেতে পারে
সুতরাং আসুন আমি বলি যে আমি রূপান্তরকারীগুলি ব্যবহার করতে চাই কারণ এটি "সর্বশেষ বিকল্প"। আমাকে দুটি রূপান্তরকারী তৈরি করতে হবে :
public class StringToCategory implements Converter<String, Category> {
@Override
public Category convert(String source) {
Category c = new Category(source);
return c;
}
}
public class CategoryToString implements Converter<Category, String> {
@Override
public String convert(Category source) {
return source.getName();
}
}
প্রথম অসুবিধা: আমাকে দুটি ক্লাস করতে হবে। উপকার: উদারতার জন্য ধন্যবাদ দেওয়ার দরকার নেই।
তারপরে, আমি কীভাবে রূপান্তরকারীগুলিকে ডেটা বাঁধতে পারি?
দ্বিতীয় ত্রুটি: এটি একটি নিয়ামক হিসাবে করার জন্য আমি কোনও সহজ উপায় (টিকা বা অন্যান্য প্রোগ্রামিক সুবিধা) খুঁজে পাই নি: মত কিছুই নয় someSpringObject.registerCustomConverter(...);
।
আমি খুঁজে পেয়েছি কেবলমাত্র উপায় ক্লান্তিকর হবে, সহজ নয় এবং কেবল সাধারণ ক্রস-নিয়ামক বাঁধাই সম্পর্কে:
-
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"> <property name="converters"> <set> <bean class="somepackage.StringToCategory"/> <bean class="somepackage.CategoryToString"/> </set> </property> </bean>
জাভা কনফিগারেশন ( কেবলমাত্র বসন্ত 3.1+ এ ):
@EnableWebMvc @Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Override protected void addFormatters(FormatterRegistry registry) { registry.addConverter(new StringToCategory()); registry.addConverter(new CategoryToString()); } }
এই সমস্ত ত্রুটিগুলি সহ কেন রূপান্তরকারী ব্যবহার করছেন? আমি কিছু অনুপস্থিত করছি ? এমন অন্য কৌশলগুলি কি আমি অবগত নই?
আমি প্রপার্টি এডিটরস ব্যবহার করতে প্রলুব্ধ হই ... বাঁধাই অনেক সহজ এবং দ্রুত is