জেএসপি ট্রিক্সিং সহজ করার কৌশল?


305

কর্মক্ষেত্রে আমাকে একগুচ্ছ HTMLফাইলকে একটি সাধারণ JSPপ্রকল্পে পরিণত করার দায়িত্ব দেওয়া হয়েছিল । এটি সত্যই সমস্ত অচল, প্রোগ্রামে কোনও সার্ভারসাইট যুক্তি নেই। আমার উল্লেখ করা উচিত আমি জাভাতে সম্পূর্ণ নতুন। জেএসপি ফাইলগুলিতে প্রচলিত অন্তর্ভুক্ত এবং ভেরিয়েবলগুলির সাথে কাজ করা সহজ বলে মনে হয় PHPতবে আমি টেমপ্লেট উত্তরাধিকার ( Djangoস্টাইল) এর মতো কিছু পাওয়ার সহজ উপায় জানতে বা কমপক্ষে একটি বেস.জেএসপি ফাইল রাখতে সক্ষম হতে চাই শিরোনাম এবং পাদচরণ, যাতে আমি পরে সামগ্রী canোকাতে পারি।

বেন লিংস এখানে তার উত্তরে কিছু আশা প্রকাশ করেছে বলে মনে হচ্ছে: জেএসপি টেম্পলেট উত্তরাধিকার কেউ কীভাবে এটি অর্জন করবেন তা ব্যাখ্যা করতে পারেন?

গতিশীল রাউটিংটি একটু বেশি বলে আমি মনে করি যে আমার বেশি সময় নেই, তাই আমি সরাসরি .jspফাইলগুলিতে ইউআরএল মানচিত্র পেয়ে খুশি , তবে আমি পরামর্শের জন্য উন্মুক্ত।

ধন্যবাদ।

সম্পাদনা করুন: আমি কোনও বাহ্যিক গ্রন্থাগার ব্যবহার করতে চাই না, কারণ এটি আমার এবং প্রকল্পে কাজ করা অন্যদের জন্য শেখার বক্ররেখা বাড়িয়ে তুলবে এবং আমি যে সংস্থার জন্য কাজ করি তার সাথে চুক্তি করা হয়েছে।

অন্য সম্পাদনা: আমি নিশ্চিত না যে JSP tagsএটি কার্যকর হবে কিনা কারণ আমার সামগ্রীতে আসলে কোনও টেম্পলেট ভেরিয়েবল নেই। আমার যা প্রয়োজন তা হ'ল এটি করতে সক্ষম হওয়ার একটি উপায়:

base.html:

<html><body>
{ content.body }
</body></html>

somepage.html

<wrapper:base.html>
<h1>Welcome</h1>
</wrapper>

আউটপুট হচ্ছে:

<html><body>
<h1>Welcome</h1>
</body></html>

আমি মনে করি এটি আমার প্রয়োজনীয় সমস্ত কাজ করার জন্য যথেষ্ট বহুমুখিতা দেবে। এটি দিয়ে অর্জন করা যেতে পারে includesতবে তারপরে প্রতিটি র‌্যাপারের জন্য আমার একটি শীর্ষ এবং নীচের অংশটি অন্তর্ভুক্ত থাকতে পারে, যা একধরণের অগোছালো।

উত্তর:


682

হিসাবে skaffman প্রস্তাব , JSP 2.0 ট্যাগ ফাইল পরিভাষা আছে।

আসুন আপনার সহজ উদাহরণ গ্রহণ করা যাক।

নিম্নলিখিতটি লিখুন WEB-INF/tags/wrapper.tag

<%@tag description="Simple Wrapper Tag" pageEncoding="UTF-8"%>
<html><body>
  <jsp:doBody/>
</body></html>

এখন আপনার example.jspপৃষ্ঠায়:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>

<t:wrapper>
    <h1>Welcome</h1>
</t:wrapper>

এটি ঠিক আপনারা যা ভাবেন তা করে।


সুতরাং, এর কিছুটা আরও সাধারণ কিছুতে প্রসারিত করি। WEB-INF/tags/genericpage.tag

<%@tag description="Overall Page template" pageEncoding="UTF-8"%>
<%@attribute name="header" fragment="true" %>
<%@attribute name="footer" fragment="true" %>
<html>
  <body>
    <div id="pageheader">
      <jsp:invoke fragment="header"/>
    </div>
    <div id="body">
      <jsp:doBody/>
    </div>
    <div id="pagefooter">
      <jsp:invoke fragment="footer"/>
    </div>
  </body>
</html>

এটি ব্যবহার করতে:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>

<t:genericpage>
    <jsp:attribute name="header">
      <h1>Welcome</h1>
    </jsp:attribute>
    <jsp:attribute name="footer">
      <p id="copyright">Copyright 1927, Future Bits When There Be Bits Inc.</p>
    </jsp:attribute>
    <jsp:body>
        <p>Hi I'm the heart of the message</p>
    </jsp:body>
</t:genericpage>

কী তা আপনাকে কিনে? সত্যিই অনেক কিছু, তবে এটি আরও উন্নত হয় ...


WEB-INF/tags/userpage.tag

<%@tag description="User Page template" pageEncoding="UTF-8"%>
<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>
<%@attribute name="userName" required="true"%>

<t:genericpage>
    <jsp:attribute name="header">
      <h1>Welcome ${userName}</h1>
    </jsp:attribute>
    <jsp:attribute name="footer">
      <p id="copyright">Copyright 1927, Future Bits When There Be Bits Inc.</p>
    </jsp:attribute>
    <jsp:body>
        <jsp:doBody/>
    </jsp:body>
</t:genericpage>

এটি ব্যবহার করার জন্য: (ধরে নিন আমাদের অনুরোধে একটি ব্যবহারকারী ভেরিয়েবল রয়েছে)

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>

<t:userpage userName="${user.fullName}">
  <p>
    First Name: ${user.firstName} <br/>
    Last Name: ${user.lastName} <br/>
    Phone: ${user.phone}<br/>
  </p>
</t:userpage>

তবে এটি আপনাকে অন্য জায়গায় ব্যবহারকারীর বিশদ ব্লকটি ব্যবহার করতে পছন্দ করে। সুতরাং, আমরা এটি রিফ্যাক্টর করব। WEB-INF/tags/userdetail.tag

<%@tag description="User Page template" pageEncoding="UTF-8"%>
<%@tag import="com.example.User" %>
<%@attribute name="user" required="true" type="com.example.User"%>

First Name: ${user.firstName} <br/>
Last Name: ${user.lastName} <br/>
Phone: ${user.phone}<br/>

আগের উদাহরণটি হয়ে যায়:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>

<t:userpage userName="${user.fullName}">
  <p>
    <t:userdetail user="${user}"/>
  </p>
</t:userpage>

জেএসপি ট্যাগ ফাইলগুলির সৌন্দর্য হ'ল এটি আপনাকে মূলত জেনেরিক মার্কআপটিকে ট্যাগ করতে দেয় এবং তারপরে এটিকে আপনার হৃদয়ের সামগ্রীতে রিফ্যাক্টর করতে দেয়।

JSP Tag FilesTilesকমপক্ষে আমার জন্য, ইত্যাদি খুব দখলযুক্ত জিনিস আছে । আমি এগুলিকে ব্যবহার করা অনেক সহজ বলে মনে করি কারণ একমাত্র কাঠামো আপনি যা দিচ্ছেন তা কিছুই নয়, পূর্ব ধারণাও নেই। এছাড়াও আপনি অন্যান্য জিনিসের জন্য জেএসপি ট্যাগ ফাইলগুলি ব্যবহার করতে পারেন (উপরের ব্যবহারকারী বিশদ বিস্তৃত অংশ হিসাবে))

এখানে এমন একটি উদাহরণ রয়েছে যা ডিসপ্লেট্যাগের সাথে সমান যা আমি করেছি, তবে এটি সমস্ত ট্যাগ ফাইল (এবং Stripesফ্রেমওয়ার্ক, এটি হ'ল: ট্যাগস ..) দিয়ে সম্পন্ন। সারি সারণি, বিকল্প রঙ, পৃষ্ঠা নেভিগেশন ইত্যাদির ফলস্বরূপ:

<t:table items="${actionBean.customerList}" var="obj" css_class="display">
  <t:col css_class="checkboxcol">
    <s:checkbox name="customerIds" value="${obj.customerId}"
                onclick="handleCheckboxRangeSelection(this, event);"/>
  </t:col>
  <t:col name="customerId" title="ID"/>
  <t:col name="firstName" title="First Name"/>
  <t:col name="lastName" title="Last Name"/>
  <t:col>
    <s:link href="/Customer.action" event="preEdit">
      Edit
      <s:param name="customer.customerId" value="${obj.customerId}"/>
      <s:param name="page" value="${actionBean.page}"/>
    </s:link>
  </t:col>
</t:table>

অবশ্যই ট্যাগগুলি JSTL tags(যেমন c:ifইত্যাদি) দিয়ে কাজ করে। কোনও ট্যাগ ফাইলের শৃঙ্খলে আপনি যা করতে পারবেন না তা হ'ল জাভা স্ক্রিপ্টলেট কোড যুক্ত করা, তবে এটি আপনার মনে হতে পারে এমন সীমাবদ্ধতার পরিমাণে তেমনটি নয়। আমার যদি স্ক্রিলেটলেট স্টাফের প্রয়োজন হয় তবে আমি যুক্তিটি কেবল একটি ট্যাগে রেখেছি এবং ট্যাগটি ভিতরে রেখে দেই Easy সহজ।

সুতরাং, ট্যাগ ফাইলগুলি আপনি যা যা চান তা দেখতে অনেক বেশি হতে পারে। সবচেয়ে বেসিক স্তরে, এটি সাধারণ কাটা এবং পেস্ট রিফ্যাক্টরিং। বিন্যাসের একটি অংশ ধরুন, এটি কেটে ফেলুন, কিছু সাধারণ প্যারামিটারাইজেশন করুন এবং এটিকে একটি ট্যাগ আমন্ত্রণের মাধ্যমে প্রতিস্থাপন করুন।

উচ্চতর স্তরে, আপনি এখানে টেবিল ট্যাগের মতো অত্যাধুনিক জিনিসগুলি করতে পারেন।


34
এর জন্য ধন্যবাদ. এটি জেএসপি ট্যাগ ফাইলগুলিতে আমি খুঁজে পেল এটি সেরা টিউটোরিয়াল, যা জেএসএফ থেকে আসা আমার জন্য দুর্দান্ত ছিল। আশা করি আমি একাধিক ভোট দিতে পারতাম।
ডিজিটোজোয়েল

66
+ + 40million। আমি যে কোনও ক্রেপি টিউটোরিয়াল খুঁজে পেয়েছি তার চেয়ে এটি 50,000 গুণ ভাল ব্যাখ্যা করার জন্য আপনাকে ধন্যবাদ। রেল ওয়ার্ল্ড থেকে আগত এবং ইআরবি নিখোঁজ, এটি ঠিক আমার প্রয়োজন। আপনার একটি ব্লগ লেখা উচিত।
সিবিএমিক্স

2
সত্যিই দুর্দান্ত টিউটোরিয়াল। আপনি তৈরি টেবিল ট্যাগের কোডটি কি আমাদের সাথে ভাগ করে নিতে পারেন? আমি কিছুক্ষণ আগে নিজেই তৈরি করেছি তবে আপনার পদ্ধতির চেয়ে ভাল is
থিয়াগো ডুয়ার্টে

4
আপনি যদি কোনও ট্যাগ ফাইল ট্যাগ তৈরি করেন তবে জেএসপি ফাইলের সেই ট্যাগের লিখিত সামগ্রীতে স্ক্রিপ্টলেট কোড থাকতে পারে না: <t: mytag> এখানে কোনও স্ক্রিটলেট কোড নেই </ t: mytag>। কিন্তু ট্যাগটি নিজেই প্রয়োগ করে ট্যাগ ফাইলের মধ্যে, যে কোনও জেএসপির মতো আপনি চান সমস্ত স্ক্রিলেটলেট কোড থাকতে পারে।
হার্টং

4
দ্রষ্টব্য - মনে হয় ট্যাগগুলির ক্রমটি গুরুত্বপূর্ণ; jsp: গুণাবলী অবশ্যই jsp: body এর আগে আসতে হবে অথবা আপনি একটি ত্রুটি পাবেন। এছাড়াও জেএসপির সাথে মেলে আমাকে একটি সম্পর্কিত @ সাবট্রিবিউট ট্যাগ সেট করতে হয়েছিল: অন্য কোনও ত্রুটি এড়াতে অনুরোধ করুন। গ্লাস ফিশ 3.2.2 ব্যবহার করে
রায়ান

21

আমি বেশ সহজ, জ্যাঙ্গো স্টাইল জেএসপি টেম্পলেট উত্তরাধিকার ট্যাগ লাইব্রেরি করেছি। https://github.com/kwon37xi/jsp-template-inheritance

আমি মনে করি বাঁক না শিখে লেআউটগুলি পরিচালনা করা সহজ করে তোলে।

উদাহরণ কোড:

base.jsp: বিন্যাস

<%@page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="http://kwonnam.pe.kr/jsp/template-inheritance" prefix="layout"%>
<!DOCTYPE html>
<html lang="en">
    <head>
        <title>JSP Template Inheritance</title>
    </head>

<h1>Head</h1>
<div>
    <layout:block name="header">
        header
    </layout:block>
</div>

<h1>Contents</h1>
<div>
    <p>
    <layout:block name="contents">
        <h2>Contents will be placed under this h2</h2>
    </layout:block>
    </p>
</div>

<div class="footer">
    <hr />
    <a href="https://github.com/kwon37xi/jsp-template-inheritance">jsp template inheritance example</a>
</div>
</html>

দেখুন.jsp: বিষয়বস্তু

<%@page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="http://kwonnam.pe.kr/jsp/template-inheritance" prefix="layout"%>
<layout:extends name="base.jsp">
    <layout:put name="header" type="REPLACE">
        <h2>This is an example about layout management with JSP Template Inheritance</h2>
    </layout:put>
    <layout:put name="contents">
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin porta,
        augue ut ornare sagittis, diam libero facilisis augue, quis accumsan enim velit a mauris.
    </layout:put>
</layout:extends>

10

@ উইল হার্টুং এর জবাব হিসাবে একই বুনিয়াদি ধারণার উপর ভিত্তি করে , এখানে আমার যাদুটি এক-ট্যাগ এক্সটেনসিবল টেম্পলেট ইঞ্জিন। এটি ডকুমেন্টেশন এবং একটি উদাহরণও অন্তর্ভুক্ত করে :-)

ওয়েব-INF / ট্যাগ / block.tag:

<%--
    The block tag implements a basic but useful extensible template system.

    A base template consists of a block tag without a 'template' attribute.
    The template body is specified in a standard jsp:body tag, which can
    contain EL, JSTL tags, nested block tags and other custom tags, but
    cannot contain scriptlets (scriptlets are allowed in the template file,
    but only outside of the body and attribute tags). Templates can be
    full-page templates, or smaller blocks of markup included within a page.

    The template is customizable by referencing named attributes within
    the body (via EL). Attribute values can then be set either as attributes
    of the block tag element itself (convenient for short values), or by
    using nested jsp:attribute elements (better for entire blocks of markup).

    Rendering a template block or extending it in a child template is then
    just a matter of invoking the block tag with the 'template' attribute set
    to the desired template name, and overriding template-specific attributes
    as necessary to customize it.

    Attribute values set when rendering a tag override those set in the template
    definition, which override those set in its parent template definition, etc.
    The attributes that are set in the base template are thus effectively used
    as defaults. Attributes that are not set anywhere are treated as empty.

    Internally, attributes are passed from child to parent via request-scope
    attributes, which are removed when rendering is complete.

    Here's a contrived example:

    ====== WEB-INF/tags/block.tag (the template engine tag)

    <the file you're looking at right now>

    ====== WEB-INF/templates/base.jsp (base template)

    <%@ page trimDirectiveWhitespaces="true" %>
    <%@ taglib prefix="t" tagdir="/WEB-INF/tags" %>
    <t:block>
        <jsp:attribute name="title">Template Page</jsp:attribute>
        <jsp:attribute name="style">
            .footer { font-size: smaller; color: #aaa; }
            .content { margin: 2em; color: #009; }
            ${moreStyle}
        </jsp:attribute>
        <jsp:attribute name="footer">
            <div class="footer">
                Powered by the block tag
            </div>
        </jsp:attribute>
        <jsp:body>
            <html>
                <head>
                    <title>${title}</title>
                    <style>
                        ${style}
                    </style>
                </head>
                <body>
                    <h1>${title}</h1>
                    <div class="content">
                        ${content}
                    </div>
                    ${footer}
                </body>
            </html>
        </jsp:body>
    </t:block>

    ====== WEB-INF/templates/history.jsp (child template)

    <%@ page trimDirectiveWhitespaces="true" %>
    <%@ taglib prefix="t" tagdir="/WEB-INF/tags" %>
    <t:block template="base" title="History Lesson">
        <jsp:attribute name="content" trim="false">
            <p>${shooter} shot first!</p>
        </jsp:attribute>
    </t:block>

    ====== history-1977.jsp (a page using child template)

    <%@ page trimDirectiveWhitespaces="true" %>
    <%@ taglib prefix="t" tagdir="/WEB-INF/tags" %>
    <t:block template="history" shooter="Han" />

    ====== history-1997.jsp (a page using child template)

    <%@ page trimDirectiveWhitespaces="true" %>
    <%@ taglib prefix="t" tagdir="/WEB-INF/tags" %>
    <t:block template="history" title="Revised History Lesson">
        <jsp:attribute name="moreStyle">.revised { font-style: italic; }</jsp:attribute>
        <jsp:attribute name="shooter"><span class="revised">Greedo</span></jsp:attribute>
    </t:block>

--%>

<%@ tag trimDirectiveWhitespaces="true" %>
<%@ tag import="java.util.HashSet, java.util.Map, java.util.Map.Entry" %>
<%@ tag dynamic-attributes="dynattributes" %>
<%@ attribute name="template" %>
<%
    // get template name (adding default .jsp extension if it does not contain
    // any '.', and /WEB-INF/templates/ prefix if it does not start with a '/')
    String template = (String)jspContext.getAttribute("template");
    if (template != null) {
        if (!template.contains("."))
            template += ".jsp";
        if (!template.startsWith("/"))
            template = "/WEB-INF/templates/" + template;
    }
    // copy dynamic attributes into request scope so they can be accessed from included template page
    // (child is processed before parent template, so only set previously undefined attributes)
    Map<String, String> dynattributes = (Map<String, String>)jspContext.getAttribute("dynattributes");
    HashSet<String> addedAttributes = new HashSet<String>();
    for (Map.Entry<String, String> e : dynattributes.entrySet()) {
        if (jspContext.getAttribute(e.getKey(), PageContext.REQUEST_SCOPE) == null) {
            jspContext.setAttribute(e.getKey(), e.getValue(), PageContext.REQUEST_SCOPE);
            addedAttributes.add(e.getKey());
        }
    }
%>

<% if (template == null) { // this is the base template itself, so render it %>
    <jsp:doBody/>
<% } else { // this is a page using the template, so include the template instead %>
    <jsp:include page="<%= template %>" />
<% } %>

<%
    // clean up the added attributes to prevent side effect outside the current tag
    for (String key : addedAttributes) {
        jspContext.removeAttribute(key, PageContext.REQUEST_SCOPE);
    }
%>

4

টাইলস ব্যবহার করুন । এটি আমার জীবন বাঁচিয়েছিল।

তবে আপনি যদি না পারেন তবে পিএইচপি এর অনুরূপ করে অন্তর্ভুক্ত ট্যাগ রয়েছে

আপনার কাছে অতি সাধারণ সামগ্রী না থাকলে বডি ট্যাগটি আপনার যা প্রয়োজন তা করতে পারে না। বডি ট্যাগ একটি নির্দিষ্ট উপাদানটির শরীরের সংজ্ঞা দিতে ব্যবহৃত হয়। এই উদাহরণটি একবার দেখুন :

<jsp:element name="${content.headerName}"   
   xmlns:jsp="http://java.sun.com/JSP/Page">    
   <jsp:attribute name="lang">${content.lang}</jsp:attribute>   
   <jsp:body>${content.body}</jsp:body> 
</jsp:element>

আপনি উপাদানটির নাম উল্লেখ করুন, উপাদানটির যে কোনও বৈশিষ্ট্য থাকতে পারে (এই ক্ষেত্রে "ল্যাং"), এবং তারপরে পাঠ্যটি রয়েছে - শরীর। তাই যদি

  • content.headerName = h1,
  • content.lang = fr, এবং
  • content.body = Heading in French

তারপরে আউটপুট হবে

<h1 lang="fr">Heading in French</h1>


0

<% @ ট্যাগ বিবরণ = "ব্যবহারকারীর পৃষ্ঠা টেম্পলেট" পৃষ্ঠা এনকোডিং = "ইউটিএফ -8"%> ব্যবহারের জন্য ডিপেন্ডেসি যুক্ত করুন

<dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.2</version>
        <scope>provided</scope>
    </dependency>
        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>javax.servlet.jsp.jstl-api</artifactId>
            <version>1.2.1</version>
        </dependency>
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>
    </dependencies>

-1

আমি জানি এই উত্তরটি সত্যের কয়েক বছর পরে আসছে এবং উইল হার্টুংয়ের ইতিমধ্যে একটি দুর্দান্ত জেএসপি উত্তর রয়েছে, তবে ফেসলেটস রয়েছে, তারা মূল প্রশ্নের লিঙ্কযুক্ত প্রশ্ন থেকে উত্তরগুলিতেও উল্লেখ করেছেন।

ফেসলেটস তাই ট্যাগ বিবরণ

ফেসলেটস জাভা সার্ভার ফেসবুক ফ্রেমওয়ার্কের জন্য একটি এক্সএমএল-ভিত্তিক ভিউ প্রযুক্তি। জেএসএফের জন্য বিশেষভাবে ডিজাইন করা, ফেসলেটগুলি জেএসপি-ভিত্তিক মতামতের একটি সহজ এবং আরও শক্তিশালী বিকল্প হতে পারে। প্রাথমিকভাবে একটি পৃথক প্রকল্প, প্রযুক্তিটি জেএসএফ 2.0 এবং জাভা-ইই 6 এর অংশ হিসাবে মানক করা হয়েছিল এবং জেএসপিকে অবমূল্যায়ন করেছে। প্রায় সমস্ত জেএসএফ ২.০ লক্ষ্যযুক্ত উপাদান লাইব্রেরি আর জেএসপি সমর্থন করে না, তবে কেবল ফেসলেটস।

দুঃখের বিষয়, আমি খুঁজে পাওয়া সেরা প্লেইন টিউটোরিয়ালটি উইকিপিডিয়ায় ছিল, টিউটোরিয়াল সাইট নয় site প্রকৃতপক্ষে টেমপ্লেটগুলি বর্ণনা করার বিভাগটি মূল প্রশ্নটি যা জিজ্ঞাসা করেছিল তার লাইন বরাবর করে।

জাভা-ই 6 6 জেএসপি-কে অবমূল্যায়ন করেছে এই কারণে আমি ফেইসলেটগুলির সাথে যাওয়ার পরামর্শ দিচ্ছি সত্ত্বেও মনে হচ্ছে জেএসপির চেয়ে সামান্য লাভের প্রয়োজন হতে পারে looks


জাভা ই ই 6 জেএসপি-কে হ্রাস করেনি, কেবল জেএসএফ-এর জন্য ভিউ প্রযুক্তি হিসাবে জেএসপি ব্যবহার করে অবচয় করা হয়েছে।
রায়ান

@ রায়ান যেহেতু দু'জনেই এই প্রযুক্তি প্রযুক্তি সম্পর্কে কথা বলছিলেন, তাই এটি একে অবমূল্যায়ন করে বলে কী ভুল?
ফায়ারিং

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