জেএসএফ ১.২ থেকে জেএসএফ ২.০ এ স্থানান্তরিত হচ্ছে


136

আমি জেএসএফ 1.2 তে লিখিত নয় বরং একটি বৃহত অ্যাপের সাথে কাজ করছি । জেএসএফ ১.২ বর্তমানে প্রায় 6 বছর বয়সী। আমার জেএসএফ ২.০ এ আপগ্রেড করতে হবে। এটা কত কষ্টদায়ক হবে? আমি লক্ষ্য করেছি যে কাস্টম ট্যাগগুলিতে কিছু বৈশিষ্ট্য পরিবর্তন করা হয়েছে ইত্যাদি etc.

উত্তর:


245

Painfulness

জেএসএফ 1.2 থেকে 2.0 আপগ্রেড করার বেদনাদায়কতা বর্তমানে আপনি যে প্রযুক্তি ব্যবহার করছেন এবং যা আপনি ব্যবহার করতে চান তার উপর নির্ভর করে।

  • জেএসপি 2.x থেকে জেএসপি 2.x = প্রায় কোনও প্রচেষ্টা নেই।
  • ফেসলেটস ১.x থেকে ফেসলেটস ২.০ = অল্প প্রচেষ্টা।
  • জেএসপি ২.x থেকে ফেসলেটস ২.০ = প্রচুর প্রচেষ্টা। আপনার যদি কাস্টম উপাদান থাকে তবে এটি দ্বিগুণ করুন।

বেসিক পরিবর্তন

দেখার প্রযুক্তির স্যুইচ নির্বিশেষে, কমপক্ষে নিম্নলিখিত পদক্ষেপগুলি করা উচিত:

  • JSF 1.2 JAR এর /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


JSP 2.x থেকে JSP 2.x

আপনি যদি জেএসপি ২.x ব্যবহার করছেন এবং এটি ব্যবহার চালিয়ে যেতে চান , তবে মূলত আপনার আর কোনও পরিবর্তন করার দরকার নেই।

ধীরে ধীরে আপগ্রেড হচ্ছে

যদি আপনি ইতিমধ্যে এর মতো প্রত্যয় url-patternব্যবহার করেন FacesServlet, যেমন *.jsf, তবে জেনে রাখা ভাল যে FacesServletপ্রথমটি *.xhtmlফাইলের জন্য স্ক্যান করবে এবং এটি উপস্থিত না থাকলে *.jspফাইলের জন্য স্ক্যান করুন। এটি আপনাকে URL এর পরিবর্তন না করে ধীরে ধীরে জেএসপি থেকে ফেসলেটগুলিতে পর্দার আড়ালে রূপান্তর করার জন্য ঘর সরবরাহ করে।

তবে আপনি যদি উপসর্গটি ব্যবহার করেন url-pattern, পছন্দ করেন /faces/*এবং আপনি ধীরে ধীরে জেএসপি থেকে ফেসলেটগুলিতে আপগ্রেড করতে চান তবে আপনাকে অবশ্যই এটি পরিবর্তন করতে হবে *.jsfএবং বিদ্যমান জেএসপি পৃষ্ঠাগুলিতে সম্ভবত সমস্ত লিঙ্কও এতে পরিবর্তন করতে হবে।

আপনার কেবল মনে রাখতে হবে যে নতুন জেএসএফ ২.০ সরবরাহিত অন্তর্নিহিত ফাইলটি উপস্থিতির জন্য স্ক্যান করে না, এটি outcome.xhtmlযাইহোক যাবে। সুতরাং আপনি যদি আসতে চান বা যেতে চান *.jsp, তবে আপনাকে এখনও জেএসএফ 1.x উপায়ে ভিডিয়ায় অন্তর্ভুক্ত করতে হবে।


ফেসলেটস 1.x থেকে ফেসলেটস 2.0

যদি আপনি ফেসলেটস ১.x ব্যবহারের প্রযুক্তি হিসাবে ব্যবহার করেন এবং জেএসএফ ২.০ সরবরাহিত ফেসলেটগুলি ২.০ ব্যবহার করতে চান তবে আপনাকে নিম্নলিখিত অতিরিক্ত পদক্ষেপগুলি করতে হবে:

  • ফেসলেটস 1.x জেআর থেকে সরান /WEB-INF/lib
  • FaceletViewHandlerথেকে ফেসলেটস 1.x সরান faces-config.xml
  • পরিবর্তে FaceletViewHandlerপ্রসারিত করতে যে কোনও কাস্টম বাস্তবায়ন আপডেট করা দরকার ViewHandlerWrapper
  • প্রয়োজনীয় না, কিন্তু শুধু পরিষ্করণ জন্য, কোনো Facelets 1.x সংশ্লিষ্ট অপসারণ <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

মূলত এটি হওয়া উচিত।


জেএসপি 2.x থেকে ফেসলেটস 2.0

যদি আপনি জেএসপি ২. এক্স ব্যবহারের প্রযুক্তি হিসাবে ব্যবহার করেন এবং আপনি অবিলম্বে ফেসলেটস ২.০ এ আপগ্রেড করতে চান তবে সাইটটি লাইভ হওয়ার আগে আপনাকে অনেক পরিবর্তন করতে হবে। আপনি মূলত এখানে দেখুন প্রযুক্তি পরিবর্তন করছেন।

মাস্টার পৃষ্ঠা পরিবর্তন

প্রতিটি মাস্টার পৃষ্ঠায় আপনাকে নীচের বেসিক জেএসপি টেম্পলেটটি পরিবর্তন করতে হবে ..

<%@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>বিন অনুরোধে সমস্ত রেফারেন্সের থেকে মুক্তি পান সিমের দর্শনটি বাদ দিয়ে।


@ ম্যানেজডবিয়ান (নাম = "পরিচালিত বিয়াননাম") @ রিক্যুয়েস্টস্কেপড এটি :)
ড্যানিয়েল

দুর্দান্ত পোস্ট, আমাকে অনেক সাহায্য করেছে। কিছু লক্ষণীয়: jsf 1.2 থেকে jsf 2 এ যাওয়ার সময় আপনি প্রায় নির্দিষ্ট মানুষ হতে পারেন সমৃদ্ধ পৃষ্ঠগুলি 3.3.x থেকে a4j ব্যবহার করেছেন। আমি জেএসএফ 2 এর সাথে সমৃদ্ধ পৃষ্ঠগুলি 3.3.3 ব্যবহার করার সিদ্ধান্ত নিয়েছি কারণ সমৃদ্ধ পৃষ্ঠগুলি 4.x এ উন্নীত করার জন্য এটি একটি মাঝারি পরিবর্তনের মতো বলে মনে হচ্ছে। তাই আমি আপনার গাইডে করেনি (সমস্ত facelets মুখমন্ডল-কনফিগ সম্পর্কিত কিছু ফেরানো হয়েছে (সরানো taglig টীকা viewhandler সক্রিয়), তারপর অনুসৃত community.jboss.org/wiki/RichFaces333AndJSF20 এবং পরিশেষে এই কি ছিল stackoverflow.com/questions/85532/...
তোসকান

দুর্দান্ত উত্তর। আমার ক্ষেত্রে বৈধতা বাছাই করতে javax.faces.VALIDATE_EMPTY_FIELDSপ্যারামিটারটিও সেট করতে falseহয়েছিল। আরও দেখুন: স্ট্যাকওভারফ্লো
ডি ভ্রিজ


1
@ফোল্ড: আমি লিঙ্কটি ঠিক করেছি।
BalusC

7

একটি বিষয় উল্লেখ করার জন্য হ'ল যদি কেউ জেএসএফ 1.2 এর সাথে জেএসটিএল ব্যবহার করে থাকে তবে জেএসএফ 2 তে আপগ্রেড করার সময় আপনার নাম স্থানটি পরিবর্তন করা উচিত:

http://java.sun.com/jstl/core

প্রতি:

http://java.sun.com/jsp/jstl/core


2
দ্রষ্টব্য: আপনি তখনই ফেসলেটস 1.x থেকে 2.x এ স্থানান্তরিত হলে এটি প্রযোজ্য lies
BalusC

আর 2.2 এবং আপ জন্য পড়তে stackoverflow.com/questions/31068678/...
Kukeltje

6

জেএসএফ ২.০ এর অনেকগুলি নতুন বৈশিষ্ট্য এবং উপাদান রয়েছে এবং আমি মনে করি না যে মাইগ্রেশন বেদনাদায়ক হবে। থ্রিড পার্টি লাইব্রেরিগুলি ব্যবহার করা কেবলমাত্র সেই ক্ষেত্রটিতেই আপনি অসুবিধা পাবেন। যদি আপনার অ্যাপ্লিকেশনটি রিচফেসগুলির মতো লাইব্রেরিতে খুব বেশি নির্ভর করে তবে আপনি সমস্যার মুখোমুখি হবেন। রিচফেস 3 থেকে সমস্ত উপাদানগুলি রিচফেসগুলি 4 এ পোর্ট করা হয় না।

এটি জেএসএফ ২.০ অ্যাপ্লিকেশনকে জেএসএফ 2.0 তে মাইগ্রেশন করতে সহায়তা করতে পারে

এটিও পরীক্ষা করে দেখুন জেএসএফ 2 এ নতুন কী?


আপনি যখন জেএসএফ 1.x এর সাথে রিচফেসগুলি ব্যবহার করেন তখন একই রকম হত J জেএসএফের সাথে তৃতীয় পক্ষের উপাদানগুলি কীভাবে সংহত করা যায় তা জানতে আপনি সমস্ত "ব্যথা" কাটাচ্ছেন। জেএসএফ ২.x এ যাওয়ার পদ্ধতির কোনও পার্থক্য নেই। প্রোগ্রামিং এর "আনন্দ" তাই না? :)
চুওংপাম

4

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">

0

আপনি যদি অ্যাপাচি ত্রিনিদাদ ব্যবহার করেন তবে আপনাকে এটির সংস্করণ ২.০ এও আপগ্রেড করতে হবে যাতে এটি জেএসএফ ২.০ সমর্থন করবে। হ্যাকারের ভালহালায় আরও তথ্য রয়েছে ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.