উত্তর:
জেএসএফ 1.2 থেকে 2.0 আপগ্রেড করার বেদনাদায়কতা বর্তমানে আপনি যে প্রযুক্তি ব্যবহার করছেন এবং যা আপনি ব্যবহার করতে চান তার উপর নির্ভর করে।
দেখার প্রযুক্তির স্যুইচ নির্বিশেষে, কমপক্ষে নিম্নলিখিত পদক্ষেপগুলি করা উচিত:
/WEB-INF/lib
(যদি থাকে) থেকে সরান ।/WEB-INF/lib
জেআর ড্রপ করুন (যদি জেএসএফ ১.২ সার্ভলেটকন্টেইনার সরবরাহ করা হয়, আপনি সার্লেটলেট কনটেনার লাইব্রেরির আগে প্রথমে ওয়েব অ্যাপ্লিকেশন লাইব্রেরিগুলি লোড করতে ক্লাসলোডিং নীতি পরিবর্তন করতে চাইতে পারেন, অ্যাপ্লিকেশন সার্ভারে জেএসএফ 2 শ্রেণিবদ্ধকরণ সমস্যাগুলিও দেখুন )।faces-config.xml
জেএসএফ ২.০ অনুমান মেনে চলার রুট ঘোষণা আপডেট করুন ।
<faces-config
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">
দ্রষ্টব্য: আপনি যখন জেএসএফ ২.২ বা আরও নতুন ব্যবহার করছেন , উপরের এক্সএমএল স্নিপেটের http://xmlns.jcp.org
পরিবর্তে নেমস্পেস ডোমেনটি ব্যবহার করুন http://java.sun.com
।
নিশ্চিত হয়ে নিন যে web.xml
এরই মধ্যে রুট ঘোষণাটি কমপক্ষে সার্ভলেট 2.5 মেনে চলে । জেএসএফ 2.0 ২.৪ বা তার থেকে কম ( যদিও এটি হ্যাকযোগ্য ) তে কাজ করবে না ।
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="YourWebappID"
version="2.5">
দ্রষ্টব্য: আপনি যখন সার্লেটটি 3.0.০ বা আরও নতুন ব্যবহার করছেন , উপরের এক্সএমএল স্নিপেটের http://xmlns.jcp.org
পরিবর্তে নেমস্পেস ডোমেনটি ব্যবহার করুন http://java.sun.com
।
আপনি যদি জেএসপি ২.x ব্যবহার করছেন এবং এটি ব্যবহার চালিয়ে যেতে চান , তবে মূলত আপনার আর কোনও পরিবর্তন করার দরকার নেই।
যদি আপনি ইতিমধ্যে এর মতো প্রত্যয় url-pattern
ব্যবহার করেন FacesServlet
, যেমন *.jsf
, তবে জেনে রাখা ভাল যে FacesServlet
প্রথমটি *.xhtml
ফাইলের জন্য স্ক্যান করবে এবং এটি উপস্থিত না থাকলে *.jsp
ফাইলের জন্য স্ক্যান করুন। এটি আপনাকে URL এর পরিবর্তন না করে ধীরে ধীরে জেএসপি থেকে ফেসলেটগুলিতে পর্দার আড়ালে রূপান্তর করার জন্য ঘর সরবরাহ করে।
তবে আপনি যদি উপসর্গটি ব্যবহার করেন url-pattern
, পছন্দ করেন /faces/*
এবং আপনি ধীরে ধীরে জেএসপি থেকে ফেসলেটগুলিতে আপগ্রেড করতে চান তবে আপনাকে অবশ্যই এটি পরিবর্তন করতে হবে *.jsf
এবং বিদ্যমান জেএসপি পৃষ্ঠাগুলিতে সম্ভবত সমস্ত লিঙ্কও এতে পরিবর্তন করতে হবে।
আপনার কেবল মনে রাখতে হবে যে নতুন জেএসএফ ২.০ সরবরাহিত অন্তর্নিহিত ফাইলটি উপস্থিতির জন্য স্ক্যান করে না, এটি outcome.xhtml
যাইহোক যাবে। সুতরাং আপনি যদি আসতে চান বা যেতে চান *.jsp
, তবে আপনাকে এখনও জেএসএফ 1.x উপায়ে ভিডিয়ায় অন্তর্ভুক্ত করতে হবে।
যদি আপনি ফেসলেটস ১.x ব্যবহারের প্রযুক্তি হিসাবে ব্যবহার করেন এবং জেএসএফ ২.০ সরবরাহিত ফেসলেটগুলি ২.০ ব্যবহার করতে চান তবে আপনাকে নিম্নলিখিত অতিরিক্ত পদক্ষেপগুলি করতে হবে:
/WEB-INF/lib
।FaceletViewHandler
থেকে ফেসলেটস 1.x সরান faces-config.xml
।FaceletViewHandler
প্রসারিত করতে যে কোনও কাস্টম বাস্তবায়ন আপডেট করা দরকার ViewHandlerWrapper
।<context-param>
মান থেকে web.xml
যা ইতিমধ্যে মতো Facelets 2.0 এর ডিফল্ট হয় javax.faces.DEFAULT_SUFFIX
মান *.xhtml
।এক্সপ্লোর পরিচালনা ফেসবুকের 2.0 টি অনুসরণ করতে বিদ্যমান ফেসলেট ট্যাগলিবের মূল ঘোষণাটি আপডেট করুন।
<facelet-taglib
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd"
version="2.0">
দ্রষ্টব্য: আপনি যখন জেএসএফ ২.২ বা আরও নতুন ব্যবহার করছেন , উপরের এক্সএমএল স্নিপেটের http://xmlns.jcp.org
পরিবর্তে নেমস্পেস ডোমেনটি ব্যবহার করুন http://java.sun.com
।
মূলত এটি হওয়া উচিত।
যদি আপনি জেএসপি ২. এক্স ব্যবহারের প্রযুক্তি হিসাবে ব্যবহার করেন এবং আপনি অবিলম্বে ফেসলেটস ২.০ এ আপগ্রেড করতে চান তবে সাইটটি লাইভ হওয়ার আগে আপনাকে অনেক পরিবর্তন করতে হবে। আপনি মূলত এখানে দেখুন প্রযুক্তি পরিবর্তন করছেন।
প্রতিটি মাস্টার পৃষ্ঠায় আপনাকে নীচের বেসিক জেএসপি টেম্পলেটটি পরিবর্তন করতে হবে ..
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<!DOCTYPE html>
<f:view>
<html lang="en">
<head>
<title>JSP page</title>
</head>
<body>
<h:outputText value="JSF components here." />
</body>
</html>
</f:view>
.. নিম্নলিখিত মৌলিক ফেসলেট টেমপ্লেট:
<!DOCTYPE html>
<html lang="en"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<title>XHTML page</title>
</h:head>
<h:body>
<h:outputText value="JSF components here." />
</h:body>
</html>
দ্রষ্টব্য: আপনি যখন জেএসএফ ২.২ বা আরও নতুন ব্যবহার করছেন , উপরের এক্সএইচটিএমএল স্নিপেটের http://xmlns.jcp.org
পরিবর্তে নেমস্পেস ডোমেনটি ব্যবহার করুন http://java.sun.com
।
আপনার বিদ্যমান জেএসপি পৃষ্ঠাগুলি যদি ভালভাবে ডিজাইন করা থাকে তবে আপনার কোনও স্ক্রিপ্টলেট কোডের লাইন থাকা উচিত নয় এবং আপনার কেবলমাত্র <jsp:include>
জেএসপি-নির্দিষ্ট ট্যাগ হিসাবে থাকা উচিত । এগুলির যে কোনও একটি থেকে পরিবর্তন করা দরকার:
<jsp:include page="include.jsp" />
প্রতি
<ui:include src="include.xhtml" />
বেসিক জেএসপি এর পৃষ্ঠার টেম্পলেট অন্তর্ভুক্ত করে ..
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<f:subview id="include">
<h:outputText value="JSF components here." />
</f:subview>
..এই পরিবর্তিত হতে হবে নিম্নলিখিত মৌলিক ফেসলেটগুলিতে পৃষ্ঠা টেম্পলেট অন্তর্ভুক্ত:
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:outputText value="JSF components here." />
</ui:composition>
দ্রষ্টব্য: আপনি যখন জেএসএফ ২.২ বা আরও নতুন ব্যবহার করছেন , উপরের এক্সএইচটিএমএল স্নিপেটের http://xmlns.jcp.org
পরিবর্তে নেমস্পেস ডোমেনটি ব্যবহার করুন http://java.sun.com
।
এই মোজারার মাইগ্রেশন গাইড অনুসারে আপনাকে জেএসপি টিএলডি ফাইলগুলি ফেসলেট টিএলডি ফাইলগুলিতে পরিবর্তন করতে হবে ।
মাইগ্রেশন পদ্ধতির নির্বিশেষে, আপনি faces-config.xml
নতুন জেএসএফ ২.০ টিকা বা সিডিআই দ্বারা ধীরে ধীরে মুছে ফেলতে পারেন । যে কোনও এ <managed-bean>
দ্বারা টীকায়িত হতে পারে @ManagedBean
:
@ManagedBean(name="managedBeanName")
@RequestScoped
public class SomeBean {}
পরবর্তী @RequestScoped
, এছাড়াও আছে @ViewScoped
, @SessionScoped
এবং @ApplicationScoped
পাওয়া যায়। যদি আপনি এর name
বৈশিষ্ট্যটি বাদ দেন @ManagedBean
, তবে এটি 1 ম চরকে নিম্নতর করে বর্গনামে ডিফল্ট করবে।
@ManagedBean
@RequestScoped
public class SomeBean {}
এই বিশেষ উদাহরণে, এটি হবে #{someBean}
।
যে কোনও <managed-property>
ব্যবহার করে টীকায়িত করা যায় @ManagedProperty
:
@ManagedProperty("#{otherBean}")
private OtherBean otherBean;
যে কোনও <validator>
ব্যবহার করে টীকায়িত করা যায় @FacesValidator
:
@FacesValidator("someValidator")
public class SomeValidator implements Validator {}
যে কোনও <converter>
ব্যবহার করে টীকায়িত করা যায়@FacesConverter
@FacesConverter("someConverter")
public class SomeConverter implements Converter {}
যে কোনও <renderer>
ব্যবহার করে টীকায়িত করা যায়@FacesRenderer
@FacesRenderer(componentFamily="someComponentFamily", rendererType="someRendererType")
public class SomeRenderer extends Renderer {}
কোন <navigation-case>
যা উভয় হিসাবে এক্সএইচটিএমএল পৃষ্ঠার ফাইলের নাম ব্যবহার <from-outcome>
এবং <to-view-id>
যেহেতু এই করা হবে না মুছে ফেলা হতে পারে পরোক্ষভাবে সম্পন্ন। লক্ষ্য দেখার ফাইলের নামের সাথে মেলে সমস্ত ফলাফল মান পরিবর্তন করে এটি ধীরে ধীরে করা যেতে পারে।
শেষ অবধি, একই ট্যাব / উইন্ডোতে পরবর্তী অনুরোধগুলিতে শিমের ডেটা বজায় রাখার একমাত্র কারণ হিসাবে সেশনে স্কোপ করা @ViewScoped
শিমকে আরও ভালভাবে চিহ্নিত করা যেতে পারে , কারণ এন্ডিউসারটি খোলে এইভাবে শিমের ক্ষতি হবে না because বিভিন্ন ট্যাব / উইন্ডোতে একই পৃষ্ঠা।
নোট করুন যে আমি প্রাইমফিজ / রিচফার্ডস / আইসফ্রিজের মতো কোনও তৃতীয় পক্ষের কম্পোনেন্ট লাইব্রেরিগুলিকে এই উত্তরে বিবেচনা করি না, তবে নির্ভরযোগ্য উত্তরটি লেখা অসম্ভব হবে যেহেতু এটি মূলত "এটি নির্ভর করে" তে সিদ্ধ হয়। সাধারণভাবে এটি কেবলমাত্র উপাদানগুলির গ্রন্থাগারকে তাদের দ্বারা যাচাই করা-জেএসএফ 2.0 সামঞ্জস্যপূর্ণ সংস্করণে তাদের নির্দেশনা অনুযায়ী আপগ্রেড করার পক্ষে যথেষ্ট। সবেমাত্র ইউনিট পরীক্ষা লিখতে হবে, আপগ্রেডের আগে ও পরে চালানো এবং স্বতন্ত্রভাবে কোনও সমস্যা সমাধান করা।
নির্দিষ্ট উপাদান লাইব্রেরির স্থানান্তর সম্পর্কে এখানে কমপক্ষে কিছু দরকারী লিঙ্ক রয়েছে:
প্রাইমফোর্ডস এর প্রাইমফ্রিজস 1.x থেকে 2.x এর কোনও মাইগ্রেশন গাইড নেই কারণ প্রাইমফ্রিজস 1.x এর আগে থেকেই ফেসলেটস 1.x প্রয়োজন, সুতরাং আপনাকে কেবল ফেসলেটস 1.x থেকে 2.x মাইগ্রেশন পদক্ষেপগুলি অনুসরণ করতে হবে। তবে, প্রাইমফ্রিজের ২.x থেকে ৩.x (এবং উচ্চতর) মাইগ্রেশন গাইড রয়েছে যা প্রাইমফ্রিজস ১.x থেকে ৩.x (বা উচ্চতর) স্থানান্তরের ক্ষেত্রেও প্রয়োগ করতে পারে। টমাহাকের কোনও মাইগ্রেশন গাইডও নেই। মূলত আপনাকে যা পরিবর্তন করতে হবে তা হ'ল জআআআআআআগুলি এবং প্রয়োজনে <t:saveState>
বিন অনুরোধে সমস্ত রেফারেন্সের থেকে মুক্তি পান সিমের দর্শনটি বাদ দিয়ে।
javax.faces.VALIDATE_EMPTY_FIELDS
প্যারামিটারটিও সেট করতে false
হয়েছিল। আরও দেখুন: স্ট্যাকওভারফ্লো
একটি বিষয় উল্লেখ করার জন্য হ'ল যদি কেউ জেএসএফ 1.2 এর সাথে জেএসটিএল ব্যবহার করে থাকে তবে জেএসএফ 2 তে আপগ্রেড করার সময় আপনার নাম স্থানটি পরিবর্তন করা উচিত:
প্রতি:
জেএসএফ ২.০ এর অনেকগুলি নতুন বৈশিষ্ট্য এবং উপাদান রয়েছে এবং আমি মনে করি না যে মাইগ্রেশন বেদনাদায়ক হবে। থ্রিড পার্টি লাইব্রেরিগুলি ব্যবহার করা কেবলমাত্র সেই ক্ষেত্রটিতেই আপনি অসুবিধা পাবেন। যদি আপনার অ্যাপ্লিকেশনটি রিচফেসগুলির মতো লাইব্রেরিতে খুব বেশি নির্ভর করে তবে আপনি সমস্যার মুখোমুখি হবেন। রিচফেস 3 থেকে সমস্ত উপাদানগুলি রিচফেসগুলি 4 এ পোর্ট করা হয় না।
এটি জেএসএফ ২.০ অ্যাপ্লিকেশনকে জেএসএফ 2.0 তে মাইগ্রেশন করতে সহায়তা করতে পারে
এটিও পরীক্ষা করে দেখুন জেএসএফ 2 এ নতুন কী?
Web.xml
Add the jars
1. jsf-api-2.0.jar
2. jsf-impl.2.0.2.jar
পদক্ষেপ 1: ওয়েব.এক্সএমএল পরিবর্তন করুন
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<servlet>
<servlet-name>facesServlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>facesServlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>facesServlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>facesServlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>facesServlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
পদক্ষেপ 2: webmvc-config.xML
<!-- Handles requests mapped to the Spring Web Flow system -->
<bean id="flowController" class="org.springframework.webflow.mvc.servlet.FlowController">
<property name="flowExecutor" ref="flowExecutor" />
<property name="ajaxHandler">
<bean class="org.springframework.faces.webflow.JsfAjaxHandler" />
</property>
</bean>
3 য় ধাপ: facess-config.xml
<faces-config xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd" version="2.0">
আপনি যদি অ্যাপাচি ত্রিনিদাদ ব্যবহার করেন তবে আপনাকে এটির সংস্করণ ২.০ এও আপগ্রেড করতে হবে যাতে এটি জেএসএফ ২.০ সমর্থন করবে। হ্যাকারের ভালহালায় আরও তথ্য রয়েছে ।