এবং আপনি কোনও গুগলযোগ্য ত্রুটি এবং / বা ব্রাউজারের জাভাস্ক্রিপ্ট কনসোলটিতে সতর্কতাও দেখতে পাচ্ছেন না (ওয়েব বিকাশকারী টুলসেটটি খুলতে এবং তারপরে কনসোল ট্যাবটি খুলতে ক্রোম / ফায়ারফক্স 23 + / আই 9 + এ টিপুন ), তারপরে সম্ভাব্য কারণগুলির নীচে কাজ করে।
UICommandএবং UIInputউপাদানগুলি অবশ্যই কোনও উপাদানগুলির মধ্যে অবশ্যই স্থাপন করা উচিত ( UIFormউদাহরণস্বরূপ <h:form>(এবং এভাবে সরল এইচটিএমএল নয় <form>), অন্যথায় সার্ভারে কিছুই প্রেরণ করা যায় না।UICommandউপাদান আছে না type="button"অ্যাট্রিবিউট, অন্যথায় এটি একটি মৃত বোতাম যা JavaScript শুধুমাত্র দরকারী হতে হবে onclick। আরও দেখুন কিভাবে ফর্ম ইনপুট মান পাঠাতে এবং JSF শিম একটি পদ্ধতি ডাকা এবং <ঘ: commandButton> একটি postback সূচনা করা নেই ।
আপনি UIFormএকে অপরের একাধিক উপাদান বাসাতে পারবেন না । এটি এইচটিএমএলে অবৈধ। ব্রাউজারের আচরণ নির্ধারিত। অন্তর্ভুক্ত ফাইলগুলি দেখুন! আপনি UIFormসমান্তরালভাবে উপাদানগুলি ব্যবহার করতে পারেন , তবে তারা জমা দেওয়ার সময় একে অপরের প্রক্রিয়া করবে না। আপনার "গড ফর্ম" অ্যান্টিপ্যাটার্ন দিয়ে নজর রাখা উচিত; নিশ্চিত হয়ে নিন যে আপনি অজান্তে অন্য কোনও (অদৃশ্য) ইনপুটগুলি একই ফর্মটিতে বৈধ করবেন না (যেমন খুব একই ফর্মের মধ্যে প্রয়োজনীয় ইনপুটগুলির সাথে একটি লুকানো কথোপকথন রয়েছে)। জেএসএফ পৃষ্ঠায় <h: form> কীভাবে ব্যবহার করবেন তাও দেখুন ? একক ফর্ম? একাধিক ফর্ম? নেস্টেড ফর্ম? ।
কোনও UIInputমান বৈধতা / রূপান্তর ত্রুটি ঘটানো উচিত ছিল। আপনি <h:messages>কোনও বার্তা প্রদর্শন করতে ব্যবহার করতে পারেন যা কোনও ইনপুট-নির্দিষ্ট <h:message>উপাদান দ্বারা দেখানো হয়নি । ভুলবেন না অন্তর্ভুক্ত করা idএর<h:messages> মধ্যে<f:ajax render> , যদি থাকে তবে এজ্যাক্স অনুরোধে এটি আপডেট করা হবে। আরও দেখুন ঘ: commandButton টেপা হলে যখন পি বার্তা বার্তা প্রদর্শন করা হয় না ।
যদি UICommandবা UIInputউপাদানগুলি কোনও পুনরাবৃত্ত উপাদানগুলির মতো <h:dataTable>, <ui:repeat>ইত্যাদি ইত্যাদির ভিতরে স্থাপন করা হয় তবে আপনাকে অবশ্যই তা নিশ্চিত করতে হবে যে valueফর্মটি জমা দেওয়ার অনুরোধের প্রয়োগের অনুরোধ মানগুলির পর্যায়ে পুনরাবৃত্তকারী উপাদানটির ঠিক একইরকম সংরক্ষণ করা হয়েছে। জেএসএফ ক্লিক করা লিঙ্ক / বোতাম এবং জমা দেওয়া ইনপুট মানগুলি খুঁজে পেতে এর উপরে পুনরাবৃত্তি করবে। শিমটি দেখার সুযোগে রাখা এবং / অথবা নিশ্চিত করুন যে আপনি @PostConstructশিমের ডেটা মডেলটি লোড করেছেন (এবং এইভাবে কোনও গেটর পদ্ধতিতে নয়!) এটি ঠিক করা উচিত। আরও দেখুন কীভাবে এবং কখন আমি জ জন্য ডাটাবেস থেকে মডেল লোড করা উচিত: dataTable ।
যদি UICommandবা UIInputউপাদান যেমন একটি গতিশীল উৎস দ্বারা অন্তর্ভুক্ত করা হয় <ui:include src="#{bean.include}">, তাহলে আপনি তা নিশ্চিত করার জন্য ঠিক একই প্রয়োজন #{bean.include}মান ফর্ম দৃশ্যে বিল্ড সময় অনুরোধ জমা সময় সংরক্ষিত হয়। উপাদান গাছ তৈরির সময় জেএসএফ এটি পুনরায় সংশোধন করবে। শিমটি দেখার সুযোগে রাখা এবং / অথবা আপনি ডেটা মডেলটি লোড করেছেন তা নিশ্চিত করে@PostConstruct শিমের (এবং এইভাবে কোনও গেটর পদ্ধতিতে নয়!) এটি ঠিক করা উচিত। আরও দেখুন কীভাবে অজেক্স-রিফ্রেশ ডায়নামিকের মধ্যে নেভিগেশন মেনুতে সামগ্রী অন্তর্ভুক্ত করা যায়? (জেএসএফ এসপিএ) ।
renderedকম্পোনেন্ট এবং তার বাবা সব এবং অ্যাট্রিবিউট testকোনো পিতা বা মাতা এর অ্যাট্রিবিউট <c:if>/ <c:when>মূল্যায়ন করা উচিত falseসময় আবেদন ফর্ম অনুরোধে মান ফেজ অনুরোধ জমা দিন। জেএসএফ এটি টেম্পারড / হ্যাক অনুরোধগুলির বিরুদ্ধে সুরক্ষার অংশ হিসাবে পুনরায় যাচাই করবে। ভেরিয়েবল একটি অবস্থার জন্য দায়ী সংরক্ষণ @ViewScopedশিম বা নিশ্চিত করুন যে আপনি সঠিকভাবে শর্ত preinitializing করছি উপার্জন @PostConstructএকটি এর @RequestScopedশিম এটা ঠিক করা উচিত নয়। একই disabledউপাদানটির বৈশিষ্ট্যটিতে প্রযোজ্য , যা trueঅনুরোধের মানগুলির পর্যায়ে প্রয়োগের সময় মূল্যায়ন করা উচিত নয় । জেএসএফ কমান্ডবটনের ক্রিয়াটি না চাওয়াও দেখুন , শর্তাধীন রেন্ডার উপাদানগুলিতে ফর্ম জমা প্রক্রিয়াজাত নয় এবংএইচ: কমান্ডবটন একবার কাজ করছে না আমি একবার <h: প্যানেলগ্রুপ রেন্ডারড> এ গুটিয়ে রাখি ।
onclickএর অ্যাট্রিবিউট UICommandকম্পোনেন্ট এবং onsubmitএর অ্যাট্রিবিউট UIFormউপাদান আসতে করা উচিত নয় falseবা জাভাস্ক্রিপ্ট ত্রুটি হতে পারে। ব্রাউজারের জেএস কনসোলে কোনও জেএস ত্রুটি দৃশ্যমান <h:commandLink>বা হওয়া উচিত <f:ajax>। সাধারণত সঠিক ত্রুটির বার্তাটি গুগল করা ইতিমধ্যে আপনাকে উত্তর দেবে। আনক্যাচড টাইপআরয়ের ফলস্বরূপ প্রাইমফ্রিজের ফলাফলের সাথে ম্যানুয়ালি jQuery যুক্ত / যুক্ত করা দেখুন ।
আপনি যদি জেএসএফ ২.x <f:ajax>বা উদাহরণস্বরূপ প্রাইমফিসের মাধ্যমে অ্যাজাক্স ব্যবহার করছেন তবে <p:commandXxx>নিশ্চিত হয়ে নিন যে আপনার <h:head>পরিবর্তে মাস্টার টেম্পলেটটিতে রয়েছে <head>। অন্যথায় জেএসএফ প্রয়োজনীয় জাভাস্ক্রিপ্ট ফাইলগুলিতে স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত করতে সক্ষম হবে না যার মধ্যে অ্যাজাক্স ফাংশন রয়েছে। এটি জাভাস্ক্রিপ্ট ত্রুটির ফলে ব্রাউজারের জেএস কনসোলে "মোজাররা সংজ্ঞায়িত নয়" বা "প্রাইমফ্রিজ সংজ্ঞায়িত নয়" এর মতো হবে। H: কমান্ডলিংক অ্যাকশনলিস্টার এফ: অজ্যাক্স এবং ইউআই: পুনরায় ব্যবহার করার সময় ব্যবহৃত হবে না তাও দেখুন ।
আপনি যদি আজাক্স ব্যবহার করছেন, এবং জমা দেওয়া মানগুলি শেষ হয়ে যায় null, তবে নিশ্চিত হয়ে নিন যে আগ্রহের উপাদানগুলি UIInputএবং উদাহরণস্বরূপ UICommandআওতাভুক্ত রয়েছে , অন্যথায় সেগুলি কার্যকর করা / প্রক্রিয়াজাত করা হবে না। <F: ajax> << h: কমান্ডবটন> এবং প্রিমিয়ার্স প্রসেস / আপডেট এবং জেএসএফ বোঝার জন্য যুক্ত মডেলটিতে জমা দেওয়া ফর্মের মানগুলি আপডেট হয়নি তা দেখুন : অ্যাজাক্স এক্সিকিউট / রেন্ডার বৈশিষ্ট্যগুলি<f:ajax execute><p:commandXxx process> ।
যদি জমা দেওয়া মানগুলি এখনও অবশেষে থাকে nullএবং আপনি মটরশুটি পরিচালনা করতে সিডিআই ব্যবহার করে থাকেন, তবে নিশ্চিত হয়ে নিন যে আপনি সঠিক প্যাকেজ থেকে স্কোপ টিকাটি আমদানি করেছেন, অন্যথায় সিডিআই ডিফল্ট হবে @Dependentযা কার্যকরভাবে ইলের প্রতিটি একক মূল্যায়নে শিমটি পুনরায় তৈরি করে অভিব্যক্তি। আরও দেখুন @ সেশনস্কোপড শিমের সুযোগটি হারাবে এবং সর্বদা পুনরায় তৈরি হয়ে যায়, ক্ষেত্রগুলি শূন্য হয়ে যায় এবং জেএসএফ 2 অ্যাপ্লিকেশনে ডিফল্ট ম্যানেজড বিন বিন্যাস কী?
যদি বাটনটির <h:form>সাথে কোনও পিতামাতাকে UICommandআগেই একই পৃষ্ঠায় অন্য ফর্ম থেকে আগত একটি এজ্যাক্স অনুরোধ দ্বারা রেন্ডার / আপডেট করা হয়, তবে প্রথম ক্রিয়াটি সর্বদা জেএসএফ ২.২ বা তার চেয়েও পুরনো ক্ষেত্রে ব্যর্থ হবে। দ্বিতীয় এবং পরবর্তী ক্রিয়াগুলি কাজ করবে। এটি রাষ্ট্রের পরিচালনা পরিচালনার ক্ষেত্রে বাগের কারণে ঘটেছিল যা জেএসএফ স্পেস ইস্যু হিসাবে 90৯০ হিসাবে রিপোর্ট করা হয়েছে এবং বর্তমানে জেএসএফ ২.৩ এ স্থির করা হয়েছে। পুরোনো JSF সংস্করণ জন্য, আপনি স্পষ্টভাবে এর ID উল্লেখ করার প্রয়োজন <h:form>মধ্যে renderএর <f:ajax>। H দেখুন : কমান্ডবটন / এইচ: কমান্ডলিঙ্ক প্রথম ক্লিকে কাজ করে না, কেবল দ্বিতীয় ক্লিকে কাজ করে ।
যদি <h:form>করেছে enctype="multipart/form-data"সমর্থন ফাইল আপলোড করার জন্য সেট, তাহলে আপনি যে আপনার অন্তত JSF 2.2 ব্যবহার করছেন, বা যে যারা একাধিক / ফর্ম-ডেটা অনুরোধ পার্স জন্য দায়ী সার্ভলেট ফিল্টার সঠিকভাবে কনফিগার করা আছে, অন্যথায় নিশ্চিত করা প্রয়োজন FacesServletইচ্ছার কোনও অনুরোধের প্যারামিটারগুলি আদৌ না পেয়ে শেষ করুন এবং অনুরোধের মানগুলি প্রয়োগ করতে সক্ষম হবেন না। কীভাবে এই ধরনের ফিল্টার কনফিগার করা যায় তা আপলোড উপাদান ব্যবহার করা হচ্ছে তার উপর নির্ভর করে। Tomahawk থেকে জন্য <t:inputFileUpload>, চেক এই উত্তর এবং PrimeFaces জন্য <p:fileUpload>, চেক এই উত্তর । অথবা, যদি আপনি আসলে কোনও ফাইল আপলোড না করেন তবে গুণটি পুরোপুরি সরিয়ে ফেলুন।
নিশ্চিত করুন যে ActionEventআর্গুমেন্টটি actionListenerএকটি javax.faces.event.ActionEventএবং এইভাবে নয় java.awt.event.ActionEvent, যা বেশিরভাগ আইডিই হ'ল 1 ম স্বতঃসম্পূর্ণ বিকল্প হিসাবে পরামর্শ দেয়। কোনও যুক্তি না থাকাও যদি আপনি ব্যবহার করেন তবে ভুল actionListener="#{bean.method}"। আপনি যদি আপনার পদ্ধতিতে কোনও যুক্তি না চান তবে ব্যবহার করুন actionListener="#{bean.method()}"। অথবা সম্ভবত আপনি actionপরিবর্তে ব্যবহার করতে চান actionListener। অ্যাকশন এবং অ্যাকশনলিস্টারের মধ্যে পার্থক্যও দেখুন ।
নিশ্চিত করুন যে অনুরোধ-প্রতিক্রিয়া শৃঙ্খলার কোনও PhaseListenerবা কোনও EventListenerজেএসএফ জীবনকালকে পরিবর্তিত করেছে উদাহরণস্বরূপ কলিং FacesContext#renderResponse()বা দ্বারা অনুরোধের ক্রিয়া পর্বটি এড়াতেFacesContext#responseComplete() ।
নিশ্চিত করুন যে কোনও Filterবা Servletএকই অনুরোধ-প্রতিক্রিয়া শৃঙ্খলে FacesServletকোনওভাবে অনুরোধটিকে অবরুদ্ধ করেছে । উদাহরণস্বরূপ, লগইন / সুরক্ষা ফিল্টার যেমন স্প্রিং সিকিউরিটি। বিশেষত এজাক্স অনুরোধগুলিতে যা ডিফল্টরূপে কোনও ইউআই প্রতিক্রিয়া না দিয়ে শেষ হয়। আরও দেখুন স্প্রিং সিকিউরিটি 4 এবং PrimeFaces 5 AJAX অনুরোধ হ্যান্ডলিং ।
আপনি যদি কোনও প্রাইমফ্রিজ <p:dialog>বা এ ব্যবহার করে থাকেন <p:overlayPanel>তবে নিশ্চিত হয়ে নিন যে তাদের নিজস্ব রয়েছে <h:form>। কারণ, এই উপাদানগুলি জাভাস্ক্রিপ্ট দ্বারা ডিফল্টরূপে এইচটিএমএলের শেষের দিকে স্থানান্তরিত হয় <body>। সুতরাং, যদি তারা মূলত a এর ভিতরে বসে থাকে <form>তবে তারা এখন আর এ বসবে না <form>। P দেখুন : p: ডায়ালগের ভিতরে কমান্ডবটন ক্রিয়া কাজ করে না
কাঠামোর মধ্যে বাগ। উদাহরণস্বরূপ, একটি ইউটিআই উপাদান ব্যবহার করে যখন একটি অ্যাট্রিবিউট (বা কিছু ক্ষেত্রে একটি উপ-উপাদান) ব্যবহার করা হয় তখন রিচফিসের একটি " রূপান্তর ত্রুটি " থাকে । ক্যালেন্ডারের তারিখের জন্য কোনও মান সেট না করা থাকলে এই বাগটি শিম পদ্ধতিটি চালিত হওয়া থেকে বাধা দেয়। সাধারণ কার্যকারী উদাহরণ দিয়ে শুরু করে এবং বাগটি আবিষ্কার না হওয়া অবধি পৃষ্ঠার ব্যাক আপ করে কাঠামো বাগগুলি সন্ধান করা সম্ভব।rich:calendardefaultLabelrich:placeholder
যদি আপনি এখনও আটকে থাকেন তবে এটি ডিবাগ করার সময় এসেছে। ক্লায়েন্টের পাশে, ওয়েব বিকাশকারী সরঞ্জামসেট খুলতে ওয়েব ব্রাউজারে F12 চাপুন। কনসোল ট্যাব ক্লিক করুন যাতে জাভাস্ক্রিপ্ট কনসোল দেখুন। এটি কোনও জাভাস্ক্রিপ্ট ত্রুটিমুক্ত হওয়া উচিত। স্ক্রিনশটের নীচে ক্রোমের একটি উদাহরণ যা ঘোষিত <f:ajax>না হওয়ার সময় একটি সক্ষম বোতাম জমা দেওয়ার ক্ষেত্রে প্রদর্শিত করে <h:head>(উপরের point পয়েন্টে বর্ণিত)।
সার্ভার সাইডে, নিশ্চিত হয়ে নিন যে সার্ভারটি ডিবাগ মোডে শুরু হয়েছে। আগ্রহের জেএসএফ উপাদানটির একটি পদ্ধতিতে একটি ডিবাগ ব্রেকপয়েন্টটি রাখুন যা আপনি ফর্ম জমা দেওয়ার প্রক্রিয়া করার সময় ডাকা হবে বলে আশা করছেন। যেমন UICommandউপাদান ক্ষেত্রে , যে হবে UICommand#queueEvent()এবং UIInputউপাদান ক্ষেত্রে , যে হবে UIInput#validate()। কোড প্রয়োগের জন্য পদক্ষেপ নিন এবং প্রত্যাশা অনুযায়ী প্রবাহ এবং ভেরিয়েবলগুলি কিনা তা পরীক্ষা করুন। স্ক্রিনশটের নীচে একটিগ্রহের ডিবাগার থেকে একটি উদাহরণ।