কমান্ডবটন / কমান্ডলিঙ্ক / অজ্যাক্স অ্যাকশন / শ্রোতার পদ্ধতিটি চালিত নয় বা ইনপুট মান সেট করা / আপডেট করা হয়নি


345

কখনও কখনও, যখন ব্যবহার <h:commandLink>, <h:commandButton>বা <f:ajax>, action, actionListenerবা listenerট্যাগ যুক্ত পদ্ধতি কেবল প্রার্থনা হচ্ছে না। অথবা, শিমের বৈশিষ্ট্যগুলি জমা দেওয়া UIInputমানগুলির সাথে আপডেট হয় না ।

এর সম্ভাব্য কারণ এবং সমাধান কী কী?

উত্তর:


687

ভূমিকা

যখনই একটি UICommand কম্পোনেন্ট ( <h:commandXxx>, <p:commandXxx>ইত্যাদি) সংশ্লিষ্ট কর্ম পদ্ধতি, অথবা একটি ডাকা ব্যর্থ UIInputউপাদান ( <h:inputXxx>, <p:inputXxxx>ইত্যাদি) পেশ মান প্রক্রিয়া এবং / অথবা মডেল মান আপডেট করতে ব্যর্থ হয়, এবং আপনি যে কোনো googlable ব্যতিক্রম দেখা হয়নি এবং / অথবা সার্ভার লগ-এ সতর্কতা, আপনি যখন জেএসএফ এজাক্স অনুরোধগুলিতে ব্যতিক্রম হ্যান্ডলিং হিসাবে কোনও এজাক্স ব্যতিক্রম হ্যান্ডলারটি কনফিগার করেন না বা যখন আপনি প্রসঙ্গের প্যারামিটারের নীচে সেট করেন তখনও নয় web.xml,

<context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
</context-param>

এবং আপনি কোনও গুগলযোগ্য ত্রুটি এবং / বা ব্রাউজারের জাভাস্ক্রিপ্ট কনসোলটিতে সতর্কতাও দেখতে পাচ্ছেন না (ওয়েব বিকাশকারী টুলসেটটি খুলতে এবং তারপরে কনসোল ট্যাবটি খুলতে ক্রোম / ফায়ারফক্স 23 + / আই 9 + এ টিপুন ), তারপরে সম্ভাব্য কারণগুলির নীচে কাজ করে।

সম্ভাব্য কারণ

  1. UICommandএবং UIInputউপাদানগুলি অবশ্যই কোনও উপাদানগুলির মধ্যে অবশ্যই স্থাপন করা উচিত ( UIFormউদাহরণস্বরূপ <h:form>(এবং এভাবে সরল এইচটিএমএল নয় <form>), অন্যথায় সার্ভারে কিছুই প্রেরণ করা যায় না।UICommandউপাদান আছে না type="button"অ্যাট্রিবিউট, অন্যথায় এটি একটি মৃত বোতাম যা JavaScript শুধুমাত্র দরকারী হতে হবে onclick। আরও দেখুন কিভাবে ফর্ম ইনপুট মান পাঠাতে এবং JSF শিম একটি পদ্ধতি ডাকা এবং <ঘ: commandButton> একটি postback সূচনা করা নেই

  2. আপনি UIFormএকে অপরের একাধিক উপাদান বাসাতে পারবেন না । এটি এইচটিএমএলে অবৈধ। ব্রাউজারের আচরণ নির্ধারিত। অন্তর্ভুক্ত ফাইলগুলি দেখুন! আপনি UIFormসমান্তরালভাবে উপাদানগুলি ব্যবহার করতে পারেন , তবে তারা জমা দেওয়ার সময় একে অপরের প্রক্রিয়া করবে না। আপনার "গড ফর্ম" অ্যান্টিপ্যাটার্ন দিয়ে নজর রাখা উচিত; নিশ্চিত হয়ে নিন যে আপনি অজান্তে অন্য কোনও (অদৃশ্য) ইনপুটগুলি একই ফর্মটিতে বৈধ করবেন না (যেমন খুব একই ফর্মের মধ্যে প্রয়োজনীয় ইনপুটগুলির সাথে একটি লুকানো কথোপকথন রয়েছে)। জেএসএফ পৃষ্ঠায় <h: form> কীভাবে ব্যবহার করবেন তাও দেখুন ? একক ফর্ম? একাধিক ফর্ম? নেস্টেড ফর্ম?

  3. কোনও UIInputমান বৈধতা / রূপান্তর ত্রুটি ঘটানো উচিত ছিল। আপনি <h:messages>কোনও বার্তা প্রদর্শন করতে ব্যবহার করতে পারেন যা কোনও ইনপুট-নির্দিষ্ট <h:message>উপাদান দ্বারা দেখানো হয়নি । ভুলবেন না অন্তর্ভুক্ত করা idএর<h:messages> মধ্যে<f:ajax render> , যদি থাকে তবে এজ্যাক্স অনুরোধে এটি আপডেট করা হবে। আরও দেখুন ঘ: commandButton টেপা হলে যখন পি বার্তা বার্তা প্রদর্শন করা হয় না

  4. যদি UICommandবা UIInputউপাদানগুলি কোনও পুনরাবৃত্ত উপাদানগুলির মতো <h:dataTable>, <ui:repeat>ইত্যাদি ইত্যাদির ভিতরে স্থাপন করা হয় তবে আপনাকে অবশ্যই তা নিশ্চিত করতে হবে যে valueফর্মটি জমা দেওয়ার অনুরোধের প্রয়োগের অনুরোধ মানগুলির পর্যায়ে পুনরাবৃত্তকারী উপাদানটির ঠিক একইরকম সংরক্ষণ করা হয়েছে। জেএসএফ ক্লিক করা লিঙ্ক / বোতাম এবং জমা দেওয়া ইনপুট মানগুলি খুঁজে পেতে এর উপরে পুনরাবৃত্তি করবে। শিমটি দেখার সুযোগে রাখা এবং / অথবা নিশ্চিত করুন যে আপনি @PostConstructশিমের ডেটা মডেলটি লোড করেছেন (এবং এইভাবে কোনও গেটর পদ্ধতিতে নয়!) এটি ঠিক করা উচিত। আরও দেখুন কীভাবে এবং কখন আমি জ জন্য ডাটাবেস থেকে মডেল লোড করা উচিত: dataTable

  5. যদি UICommandবা UIInputউপাদান যেমন একটি গতিশীল উৎস দ্বারা অন্তর্ভুক্ত করা হয় <ui:include src="#{bean.include}">, তাহলে আপনি তা নিশ্চিত করার জন্য ঠিক একই প্রয়োজন #{bean.include}মান ফর্ম দৃশ্যে বিল্ড সময় অনুরোধ জমা সময় সংরক্ষিত হয়। উপাদান গাছ তৈরির সময় জেএসএফ এটি পুনরায় সংশোধন করবে। শিমটি দেখার সুযোগে রাখা এবং / অথবা আপনি ডেটা মডেলটি লোড করেছেন তা নিশ্চিত করে@PostConstruct শিমের (এবং এইভাবে কোনও গেটর পদ্ধতিতে নয়!) এটি ঠিক করা উচিত। আরও দেখুন কীভাবে অজেক্স-রিফ্রেশ ডায়নামিকের মধ্যে নেভিগেশন মেনুতে সামগ্রী অন্তর্ভুক্ত করা যায়? (জেএসএফ এসপিএ)

  6. renderedকম্পোনেন্ট এবং তার বাবা সব এবং অ্যাট্রিবিউট testকোনো পিতা বা মাতা এর অ্যাট্রিবিউট <c:if>/ <c:when>মূল্যায়ন করা উচিত falseসময় আবেদন ফর্ম অনুরোধে মান ফেজ অনুরোধ জমা দিন। জেএসএফ এটি টেম্পারড / হ্যাক অনুরোধগুলির বিরুদ্ধে সুরক্ষার অংশ হিসাবে পুনরায় যাচাই করবে। ভেরিয়েবল একটি অবস্থার জন্য দায়ী সংরক্ষণ @ViewScopedশিম বা নিশ্চিত করুন যে আপনি সঠিকভাবে শর্ত preinitializing করছি উপার্জন @PostConstructএকটি এর @RequestScopedশিম এটা ঠিক করা উচিত নয়। একই disabledউপাদানটির বৈশিষ্ট্যটিতে প্রযোজ্য , যা trueঅনুরোধের মানগুলির পর্যায়ে প্রয়োগের সময় মূল্যায়ন করা উচিত নয় । জেএসএফ কমান্ডবটনের ক্রিয়াটি না চাওয়াও দেখুন , শর্তাধীন রেন্ডার উপাদানগুলিতে ফর্ম জমা প্রক্রিয়াজাত নয় এবংএইচ: কমান্ডবটন একবার কাজ করছে না আমি একবার <h: প্যানেলগ্রুপ রেন্ডারড> এ গুটিয়ে রাখি

  7. onclickএর অ্যাট্রিবিউট UICommandকম্পোনেন্ট এবং onsubmitএর অ্যাট্রিবিউট UIFormউপাদান আসতে করা উচিত নয় falseবা জাভাস্ক্রিপ্ট ত্রুটি হতে পারে। ব্রাউজারের জেএস কনসোলে কোনও জেএস ত্রুটি দৃশ্যমান <h:commandLink>বা হওয়া উচিত <f:ajax>। সাধারণত সঠিক ত্রুটির বার্তাটি গুগল করা ইতিমধ্যে আপনাকে উত্তর দেবে। আনক্যাচড টাইপআরয়ের ফলস্বরূপ প্রাইমফ্রিজের ফলাফলের সাথে ম্যানুয়ালি jQuery যুক্ত / যুক্ত করা দেখুন ।

  8. আপনি যদি জেএসএফ ২.x <f:ajax>বা উদাহরণস্বরূপ প্রাইমফিসের মাধ্যমে অ্যাজাক্স ব্যবহার করছেন তবে <p:commandXxx>নিশ্চিত হয়ে নিন যে আপনার <h:head>পরিবর্তে মাস্টার টেম্পলেটটিতে রয়েছে <head>। অন্যথায় জেএসএফ প্রয়োজনীয় জাভাস্ক্রিপ্ট ফাইলগুলিতে স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত করতে সক্ষম হবে না যার মধ্যে অ্যাজাক্স ফাংশন রয়েছে। এটি জাভাস্ক্রিপ্ট ত্রুটির ফলে ব্রাউজারের জেএস কনসোলে "মোজাররা সংজ্ঞায়িত নয়" বা "প্রাইমফ্রিজ সংজ্ঞায়িত নয়" এর মতো হবে। H: কমান্ডলিংক অ্যাকশনলিস্টার এফ: অজ্যাক্স এবং ইউআই: পুনরায় ব্যবহার করার সময় ব্যবহৃত হবে না তাও দেখুন

  9. আপনি যদি আজাক্স ব্যবহার করছেন, এবং জমা দেওয়া মানগুলি শেষ হয়ে যায় null, তবে নিশ্চিত হয়ে নিন যে আগ্রহের উপাদানগুলি UIInputএবং উদাহরণস্বরূপ UICommandআওতাভুক্ত রয়েছে , অন্যথায় সেগুলি কার্যকর করা / প্রক্রিয়াজাত করা হবে না। <F: ajax> << h: কমান্ডবটন> এবং প্রিমিয়ার্স প্রসেস / আপডেট এবং জেএসএফ বোঝার জন্য যুক্ত মডেলটিতে জমা দেওয়া ফর্মের মানগুলি আপডেট হয়নি তা দেখুন : অ্যাজাক্স এক্সিকিউট / রেন্ডার বৈশিষ্ট্যগুলি<f:ajax execute><p:commandXxx process>

  10. যদি জমা দেওয়া মানগুলি এখনও অবশেষে থাকে nullএবং আপনি মটরশুটি পরিচালনা করতে সিডিআই ব্যবহার করে থাকেন, তবে নিশ্চিত হয়ে নিন যে আপনি সঠিক প্যাকেজ থেকে স্কোপ টিকাটি আমদানি করেছেন, অন্যথায় সিডিআই ডিফল্ট হবে @Dependentযা কার্যকরভাবে ইলের প্রতিটি একক মূল্যায়নে শিমটি পুনরায় তৈরি করে অভিব্যক্তি। আরও দেখুন @ সেশনস্কোপড শিমের সুযোগটি হারাবে এবং সর্বদা পুনরায় তৈরি হয়ে যায়, ক্ষেত্রগুলি শূন্য হয়ে যায় এবং জেএসএফ 2 অ্যাপ্লিকেশনে ডিফল্ট ম্যানেজড বিন বিন্যাস কী?

  11. যদি বাটনটির <h:form>সাথে কোনও পিতামাতাকে UICommandআগেই একই পৃষ্ঠায় অন্য ফর্ম থেকে আগত একটি এজ্যাক্স অনুরোধ দ্বারা রেন্ডার / আপডেট করা হয়, তবে প্রথম ক্রিয়াটি সর্বদা জেএসএফ ২.২ বা তার চেয়েও পুরনো ক্ষেত্রে ব্যর্থ হবে। দ্বিতীয় এবং পরবর্তী ক্রিয়াগুলি কাজ করবে। এটি রাষ্ট্রের পরিচালনা পরিচালনার ক্ষেত্রে বাগের কারণে ঘটেছিল যা জেএসএফ স্পেস ইস্যু হিসাবে 90৯০ হিসাবে রিপোর্ট করা হয়েছে এবং বর্তমানে জেএসএফ ২.৩ এ স্থির করা হয়েছে। পুরোনো JSF সংস্করণ জন্য, আপনি স্পষ্টভাবে এর ID উল্লেখ করার প্রয়োজন <h:form>মধ্যে renderএর <f:ajax>H দেখুন : কমান্ডবটন / এইচ: কমান্ডলিঙ্ক প্রথম ক্লিকে কাজ করে না, কেবল দ্বিতীয় ক্লিকে কাজ করে

  12. যদি <h:form>করেছে enctype="multipart/form-data"সমর্থন ফাইল আপলোড করার জন্য সেট, তাহলে আপনি যে আপনার অন্তত JSF 2.2 ব্যবহার করছেন, বা যে যারা একাধিক / ফর্ম-ডেটা অনুরোধ পার্স জন্য দায়ী সার্ভলেট ফিল্টার সঠিকভাবে কনফিগার করা আছে, অন্যথায় নিশ্চিত করা প্রয়োজন FacesServletইচ্ছার কোনও অনুরোধের প্যারামিটারগুলি আদৌ না পেয়ে শেষ করুন এবং অনুরোধের মানগুলি প্রয়োগ করতে সক্ষম হবেন না। কীভাবে এই ধরনের ফিল্টার কনফিগার করা যায় তা আপলোড উপাদান ব্যবহার করা হচ্ছে তার উপর নির্ভর করে। Tomahawk থেকে জন্য <t:inputFileUpload>, চেক এই উত্তর এবং PrimeFaces জন্য <p:fileUpload>, চেক এই উত্তর । অথবা, যদি আপনি আসলে কোনও ফাইল আপলোড না করেন তবে গুণটি পুরোপুরি সরিয়ে ফেলুন।

  13. নিশ্চিত করুন যে ActionEventআর্গুমেন্টটি actionListenerএকটি javax.faces.event.ActionEventএবং এইভাবে নয় java.awt.event.ActionEvent, যা বেশিরভাগ আইডিই হ'ল 1 ম স্বতঃসম্পূর্ণ বিকল্প হিসাবে পরামর্শ দেয়। কোনও যুক্তি না থাকাও যদি আপনি ব্যবহার করেন তবে ভুল actionListener="#{bean.method}"। আপনি যদি আপনার পদ্ধতিতে কোনও যুক্তি না চান তবে ব্যবহার করুন actionListener="#{bean.method()}"। অথবা সম্ভবত আপনি actionপরিবর্তে ব্যবহার করতে চান actionListenerঅ্যাকশন এবং অ্যাকশনলিস্টারের মধ্যে পার্থক্যও দেখুন

  14. নিশ্চিত করুন যে অনুরোধ-প্রতিক্রিয়া শৃঙ্খলার কোনও PhaseListenerবা কোনও EventListenerজেএসএফ জীবনকালকে পরিবর্তিত করেছে উদাহরণস্বরূপ কলিং FacesContext#renderResponse()বা দ্বারা অনুরোধের ক্রিয়া পর্বটি এড়াতেFacesContext#responseComplete()

  15. নিশ্চিত করুন যে কোনও Filterবা Servletএকই অনুরোধ-প্রতিক্রিয়া শৃঙ্খলে FacesServletকোনওভাবে অনুরোধটিকে অবরুদ্ধ করেছে । উদাহরণস্বরূপ, লগইন / সুরক্ষা ফিল্টার যেমন স্প্রিং সিকিউরিটি। বিশেষত এজাক্স অনুরোধগুলিতে যা ডিফল্টরূপে কোনও ইউআই প্রতিক্রিয়া না দিয়ে শেষ হয়। আরও দেখুন স্প্রিং সিকিউরিটি 4 এবং PrimeFaces 5 AJAX অনুরোধ হ্যান্ডলিং

  16. আপনি যদি কোনও প্রাইমফ্রিজ <p:dialog>বা এ ব্যবহার করে থাকেন <p:overlayPanel>তবে নিশ্চিত হয়ে নিন যে তাদের নিজস্ব রয়েছে <h:form>। কারণ, এই উপাদানগুলি জাভাস্ক্রিপ্ট দ্বারা ডিফল্টরূপে এইচটিএমএলের শেষের দিকে স্থানান্তরিত হয় <body>। সুতরাং, যদি তারা মূলত a এর ভিতরে বসে থাকে <form>তবে তারা এখন আর এ বসবে না <form>P দেখুন : p: ডায়ালগের ভিতরে কমান্ডবটন ক্রিয়া কাজ করে না

  17. কাঠামোর মধ্যে বাগ। উদাহরণস্বরূপ, একটি ইউটিআই উপাদান ব্যবহার করে যখন একটি অ্যাট্রিবিউট (বা কিছু ক্ষেত্রে একটি উপ-উপাদান) ব্যবহার করা হয় তখন রিচফিসের একটি " রূপান্তর ত্রুটি " থাকে । ক্যালেন্ডারের তারিখের জন্য কোনও মান সেট না করা থাকলে এই বাগটি শিম পদ্ধতিটি চালিত হওয়া থেকে বাধা দেয়। সাধারণ কার্যকারী উদাহরণ দিয়ে শুরু করে এবং বাগটি আবিষ্কার না হওয়া অবধি পৃষ্ঠার ব্যাক আপ করে কাঠামো বাগগুলি সন্ধান করা সম্ভব।rich:calendardefaultLabelrich:placeholder

ডিবাগিং ইঙ্গিত

যদি আপনি এখনও আটকে থাকেন তবে এটি ডিবাগ করার সময় এসেছে। ক্লায়েন্টের পাশে, ওয়েব বিকাশকারী সরঞ্জামসেট খুলতে ওয়েব ব্রাউজারে F12 চাপুন। কনসোল ট্যাব ক্লিক করুন যাতে জাভাস্ক্রিপ্ট কনসোল দেখুন। এটি কোনও জাভাস্ক্রিপ্ট ত্রুটিমুক্ত হওয়া উচিত। স্ক্রিনশটের নীচে ক্রোমের একটি উদাহরণ যা ঘোষিত <f:ajax>না হওয়ার সময় একটি সক্ষম বোতাম জমা দেওয়ার ক্ষেত্রে প্রদর্শিত করে <h:head>(উপরের point পয়েন্টে বর্ণিত)।

জেএস কনসোল

HTTP ট্র্যাফিক মনিটর দেখতে নেটওয়ার্ক ট্যাবে ক্লিক করুন । ফর্মটি জমা দিন এবং অনুরোধ শিরোনাম এবং ফর্ম ডেটা এবং প্রতিক্রিয়া সংস্থাটি প্রত্যাশা অনুযায়ী থাকলে তা তদন্ত করুন। স্ক্রিনশটের নীচে ক্রোমের একটি উদাহরণ যা একটি একক <h:inputText>এবং একক <h:commandButton>সহ একটি সহজ ফর্ম জমা দেওয়ার একটি সফল এজ্যাক্স প্রদর্শন করে <f:ajax execute="@form" render="@form">

নেটওয়ার্ক মনিটর

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

সার্ভার সাইডে, নিশ্চিত হয়ে নিন যে সার্ভারটি ডিবাগ মোডে শুরু হয়েছে। আগ্রহের জেএসএফ উপাদানটির একটি পদ্ধতিতে একটি ডিবাগ ব্রেকপয়েন্টটি রাখুন যা আপনি ফর্ম জমা দেওয়ার প্রক্রিয়া করার সময় ডাকা হবে বলে আশা করছেন। যেমন UICommandউপাদান ক্ষেত্রে , যে হবে UICommand#queueEvent()এবং UIInputউপাদান ক্ষেত্রে , যে হবে UIInput#validate()। কোড প্রয়োগের জন্য পদক্ষেপ নিন এবং প্রত্যাশা অনুযায়ী প্রবাহ এবং ভেরিয়েবলগুলি কিনা তা পরীক্ষা করুন। স্ক্রিনশটের নীচে একটিগ্রহের ডিবাগার থেকে একটি উদাহরণ।

ডিবাগ সার্ভার


1
আপনার 2 র্থ বিষয়টি আমাকে ভাবতে বাধ্য করেছে - একটি দীর্ঘ সময়ের জন্য। আমি সবেমাত্র জানতে পেরেছিলাম যে আমার মূল ফাইলে একটি f: ভিউ ট্যাগই আমার বেশিরভাগ সমস্যার কারণ ছিল। এবং সম্ভবত কারণ এটি একটি ফর্ম রেন্ডার করে, তাই না?
পাওলো গুয়েডস

2
@ পলোগুয়েডস আমি এমন কিছু খুঁজে পাচ্ছি না যা জানায় যে চ: ভিউ একটি ফর্ম সরবরাহ করে। আমার বুঝতে পারা যায় যে এটি কেবল একটি ধারক a আমার অভিজ্ঞতায় চ: ভিউ কোনও উপাদান সরবরাহ করে না।
লুকাস

@ বলিউসক 4 পয়েন্টের উপর একটি সামান্য ব্যাখ্যা
লুকাস

ধন্যবাদ, বিন্দুটি হ'ল বিনের বিন্দুতে শিমটি স্থাপন এবং / অথবা আপনি সিমের (পোস্ট) কনস্ট্রাক্টারে ডেটা মডেলটি লোড করছেন তা নিশ্চিত করা (এবং এভাবে গেটর পদ্ধতিতে নয়!) এটি ঠিক করা উচিত।
মার্ভেটিসি

2
@ কুকলতজে: এটি একটি ইএল ব্যতিক্রম ছুঁড়ে ফেলত (ইতিমধ্যে উত্তরে প্রথম অনুচ্ছেদে আবৃত)
বালুস সি

54

আপনার h:commandLinkযদি কোনও ভিতরে h:dataTableথাকে তবে এর অন্য কারণও রয়েছেh:commandLink সম্ভবত কাজ করবে না:

অন্তর্নিহিত ডেটা-উত্স যা h:dataTableআবশ্যক এটি অবশ্যই দ্বিতীয় জেএসএফ-লাইফসাইকেলে উপলব্ধ থাকতে হবে যা লিঙ্কটি ক্লিক করার পরে ট্রিগার করা হয়।

সুতরাং যদি অন্তর্নিহিত ডেটা-সোর্সটির অনুরোধটি বাদ দেওয়া হয় h:commandLinkতবে তা কার্যকর হয় না!


2
ঠিক আছে, এটা আমার কাছে পুরোপুরি পরিষ্কার ছিল না। আমি আশা করি আমার উত্তরটি যেভাবেই কার্যকর হতে পারে, যেহেতু আমার ক্ষেত্রে কমপক্ষে আমি ইউআইকমড / ইউআইডিটা নিয়ে স্পষ্টভাবে আচরণ করিনি। "সমাধান" অনুরোধ-সুযোগ থেকে অধিবেশন সুযোগে একটি ব্যাকিং
শিমকে প্রচার করছিল

1
আমি দ্বিতীয় জেনসের মন্তব্য ... আমার অনুরোধসকোপড শিমটি সেশনস্কোপড হিসাবে সেট করা আমার ডেটা টেবিলটিতে পার্থক্য তৈরি করেছে - ধন্যবাদ
জ্যাক

28

যদিও আমার উত্তরটি 100% প্রযোজ্য নয়, তবে বেশিরভাগ অনুসন্ধান ইঞ্জিন এটিকে প্রথম হিট হিসাবে আবিষ্কার করে, তবুও আমি এটি পোস্ট করার সিদ্ধান্ত নিয়েছি:

আপনি যদি প্রাইমফ্রিজ (বা কিছু অনুরূপ এপিআই) ব্যবহার করছেন p:commandButtonবা p:commandLink, সম্ভাবনা হ'ল আপনি স্পষ্টভাবে যুক্ত করতে ভুলে গেছেনprocess="@this" আপনি আপনার কমান্ডের উপাদানগুলিতে করতে ।

PrimeFaces ব্যবহারকারী নির্দেশিকা অধ্যায় 3.18 মধ্যে বলেছেন, ডিফল্ট- processএবং updateউভয় @formযা প্রায় কাছাকাছি অক্ষমতা আপনি প্লেইন JSF থেকে আশা করতে পারে বিরোধিতা, f:ajaxবা RichFaces, যা execute="@this"এবং render="@none"যথাক্রমে।

সন্ধানের জন্য আমাকে দীর্ঘ সময় নিয়েছে। (... এবং আমি মনে করি যে জেএসএফ থেকে পৃথক ডিফল্ট ব্যবহার করা বরং অস্পষ্ট!)


6
PrimeFaces জন্য ডিফল্ট processহয় @form। সুতরাং যদি পদক্ষেপটি এভাবে না চালানো হয় তবে ব্যবহারের সময় করে থাকে @thisতবে সম্ভবত আমার উত্তরটির 3 পয়েন্ট প্রযোজ্য।
বালুস সি

3
এটা হতে পারে না। আমার যুক্ত ছিল p:commandButtonযা আমি যোগ না করা পর্যন্ত অ্যাকশনলিস্টার পদ্ধতিটি চালিত করিনি process="@this"। তদ্ব্যতীত, প্রাইমফিজস ব্যবহারকারীর নির্দেশিকাটিতে আমি বিভাগ ly.১৮ এবং ৩.১৯ এ উল্লিখিত ডিফল্টগুলি স্পষ্টভাবে তালিকাভুক্ত করেছি। এটি এখানে: primefaces.googlecode.com/files/primefaces_users_guide_3_4.pdf ... সম্ভবত খেলাপি পরিবর্তন করা হয়েছিল?
কাওু

8
সম্ভবত এটি ডকুমেন্টেশনে একটি ত্রুটি। মুছে ফেলুন process="@this"এবং যুক্ত করুন <p:messages autoUpdate="true">(বা সারিবিহীন তবে অবিস্মরণীয় বার্তাগুলির জন্য সার্ভার লগটি পড়ুন) এবং আপনি দেখতে পাবেন যে একটি রূপান্তর / বৈধতা ত্রুটি ঘটেছে।
বালুস সি

কেন আপনি এই প্রশ্নের অপসারণ হয়নি stackoverflow.com/questions/60673695/...
Kukeltje

আমি ভেবেছিলাম এটি এখন খুব বেশি মূল্য দিতে পারে না ... আমি এটি মুছে ফেলেছি।
কাওু

9

আমি আরও একটি বিষয় উল্লেখ করব যা প্রাইমফেসগুলির জন্য উদ্বেগজনক p:commandButton!

আপনি যখন p:commandButtonসার্ভারে করা দরকার এমন ক্রিয়াটির জন্য কোনও ব্যবহার করেন, আপনি ব্যবহার করতে পারবেন না type="button"কারণ এটি পুশ বোতামগুলির জন্য যা সার্ভারের কাছে অজ্যাক্স / অ-এজাক্স অনুরোধের কারণ ছাড়াই কাস্টম জাভাস্ক্রিপ্ট কার্যকর করতে ব্যবহৃত হয়।

এই উদ্দেশ্যে, আপনি typeগুণটি সরবরাহ করতে পারেন (ডিফল্ট মানটি হয় "submit") বা আপনি স্পষ্টভাবে ব্যবহার করতে পারেন type="submit"

আশা করি এটি কারও সাহায্য করবে!


এটি আমাদের একটি পৃষ্ঠায় আমার প্রধান সমস্যা ছিল, গৃহীত উত্তরের কোনও পয়েন্টই আমাদের কাছে আনেনি, আপনি এই তথ্যটি কোথায় পেলেন?
উরিল আরভিজু

ঠিক আছে, আমি অনেকবার এই সমস্যাটি পেয়েছি, এবং আমি গবেষণা করেছি এবং খুঁজে পেয়েছি যে গুণাবলীর p:commandButtonবিভিন্ন মান রয়েছে type, এবং buttonএটিই ক্লায়েন্টের পক্ষ সম্পর্কে সমস্ত কিছু নিয়ে আসে। এটি Primefacesদস্তাবেজে খুঁজে পাওয়া কিছুটা কঠিন , তবে এখানে একটি লিঙ্কটি রয়েছে: developer.am/primefaces/…
akelec

আপনার জমা দেওয়ার ইঙ্গিতটি আমার সমস্যার সমাধান করেছে আমি কয়েক দিন ধরেই মুখর। অনেক ধন্যবাদ আপনার পোস্ট!
gpuk360

আপনাকে ধন্যবাদ, এটা আমার আনন্দ। আমি ইচ্ছাকৃতভাবে এই উত্তরটি রেখেছি কারণ আমাদের অনেকেরই এই জাতীয় সমস্যা ছিল। আমি কী বুঝতে পারছি তা না হওয়া পর্যন্ত আমি কয়েক দিন হেরে গিয়েছিলাম।
akelec

3

আমি নিজেই এই সমস্যার সাথে আটকে গিয়েছি এবং এই সমস্যার আরও একটি কারণ খুঁজে পেয়েছি। আপনার * .xhtml এ ব্যবহৃত বৈশিষ্ট্যের জন্য যদি আপনার ব্যাকিং শিমের মধ্যে সেটটার পদ্ধতি না থাকে তবে ক্রিয়াটি সহজভাবেই চাওয়া হবে না।


5
এটির পরিবর্তে স্ব-ব্যাখ্যা করা উচিত ছিল PropertyNotWritableException। যদি আপনি এটি না দেখে থাকেন তবে আপনি সম্ভবত একটি যথাযথ এজাক্স ব্যতিক্রম হ্যান্ডলার ছাড়াই একটি অজ্যাক্স অনুরোধটি সরিয়ে দিয়েছেন, তবে সার্ভার লগগুলিতে আপনার এটি দেখা উচিত।
বালাসসি

3
আমি p: কমান্ডবটনের এজাক্স = "মিথ্যা" না করা পর্যন্ত এটি ব্যতিক্রম দেখায় না।
Dnavir


3

আমি সম্প্রতি একটি ইউআইসিকম্যান্ড আইবিএম এক্সটেন্ডেড ফেস কম্পোনেন্টস ব্যবহার করে জেএসএফ 1.2 অ্যাপ্লিকেশন না চাইলে একটি সমস্যায় পড়েছি।

আমার একটি ডেটেবলযোগ্য (বর্ধিত সংস্করণ, তাই <hx:datatable>) এর একটি সারিটিতে একটি কমান্ড বোতাম ছিল এবং ইউআইসি কমন্ড সারণি থেকে নির্দিষ্ট সারিগুলি থেকে আগুন নেবে না (যে সারিগুলি আগুন দেয় না তা ডিফল্ট সারি প্রদর্শন আকারের চেয়ে বড় সারি ছিল)।

প্রদর্শন করার জন্য সারি সংখ্যা নির্বাচন করার জন্য আমার কাছে একটি ড্রপ-ডাউন উপাদান ছিল। এই ক্ষেত্রটির ব্যাকিংয়ের মান ছিল RequestScope। টেবিলটি নিজেই সমর্থনকারী ডেটাগুলি এক ধরণের ছিল ViewScope(বাস্তবে, অস্থায়ীভাবেSessionScope )।

যদি সারি প্রদর্শনটি নিয়ন্ত্রণের মাধ্যমে বৃদ্ধি করা হয় যা মানটিও ডেটাটেবলের rowsবৈশিষ্ট্যের সাথে আবদ্ধ ছিল , এই পরিবর্তনের ফলস্বরূপ প্রদর্শিত সারিগুলির কোনওটিই ক্লিক করা হলে ইউআইকোমন্ডকে সরিয়ে দিতে পারে না।

এই বৈশিষ্ট্যটিকে টেবিলের ডেটা হিসাবে সমস্যা হিসাবে একই স্থানে স্থাপন করা।

আমি মনে করি এটি উপরের BalusC # 4 এ ইঙ্গিত করা হয়েছে, তবে কেবল সারণির মানটি ভিউ বা সেশনটি স্কোপ করা দরকার ছিল না তবে সেই টেবিলে প্রদর্শিত সারিগুলির সংখ্যা নিয়ন্ত্রণকারী বৈশিষ্ট্যও রয়েছে।


2

আমারও এই সমস্যাটি ছিল এবং ব্রাউজারের ওয়েব কনসোলটি খোলার পরে কেবল মূল কারণটি অর্জন করতে শুরু করে। ততক্ষণ পর্যন্ত আমি কোনও ত্রুটি বার্তা (এমনকি সাথে <p:messages>) পেতে সক্ষম হয়েছি । ওয়েব কনসোলটি একটি HTTP 405 স্থিতি কোডটি দেখায় showed<h:commandButton type="submit" action="#{myBean.submit}">

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

আমি একবার আমার ওয়েব.এক্সএমএলকে রিফ্যাক্ট করেছিলাম এবং মধ্যবিত্ত-সার্ভলেট সরিয়ে ফেললাম, তখন এটি "ম্যাজিকালি" কাজ করেছিল।

নীচের লাইনটিতে, সমস্যাটি হ'ল মধ্যবিত্ত-সার্ভলেটটি এইচটিটিএস সার্লেট পরিবেশ থেকে জেএসএফ পরিবেশে পুনঃনির্দেশ করার জন্য অনুরোধডিস্প্যাচার.ফরোয়ার্ড (...) ব্যবহার করছে যেখানে সার্ভলেটটি আগে বলা হচ্ছে এইচটিটিপি সার্ভলেটরেসপোনস.সেনড্রেইডের সাথে পুনঃনির্দেশ করছিল (.. ।)।

মূলত, সেন্ডরাইডারেক্ট () ব্যবহার করে জেএসএফ "ধারক "টিকে নিয়ন্ত্রণের অনুমতি দেয় যেখানে রিকোয়েস্টডিস্প্যাচার.ফোর্ড () সম্ভবত ছিল না।

আমি জানি না কেন ফেসলেটটি শিমের বৈশিষ্ট্যগুলিতে অ্যাক্সেস করতে সক্ষম হয়েছিল তবে সেগুলি সেট করতে পারেনি, এবং এটি স্পষ্টভাবে চিপ দেয় সার্ভলেট এবং জেএসএফের মিশ্রণটি সরিয়ে দেওয়ার জন্য, তবে আমি আশা করি যে এটি কাউকে বহু ঘন্টা হেড এড়াতে সহায়তা করে- টু-সারণীর-তরুণ।


1

কোনও ইস্যুতে <h:commandLink>গুলি চালানো richfaces datatableঅস্বীকার করার সাথে সাথে আমি কোনও ইস্যু ডিবাগ করতে প্রচুর মজা পেয়েছি । টেবিলটি এক পর্যায়ে কাজ করত তবে কোনও স্পষ্ট কারণ ছাড়াই থামে। আমি কোন পাথর unturned শুধু তাই আমার খুঁজে বের করতে ছেড়ে rich:datatableভুল ব্যবহার করছিলেন rowKeyConverterযা NULLs যে সুখে সারিতে থাকা কীগুলির হিসাবে ব্যবহার richfaces ফিরে আসেন। এটি আমার <h:commandLink>ক্রিয়াকলাপ ডেকে আটকায় ।


0

আরও একটি সম্ভাবনা: যদি লক্ষণটি হ'ল প্রথম আমন্ত্রণটি কাজ করে তবে পরবর্তীগুলি না করে আপনি এখানে জেএসএফ ২.২ এর সাথে প্রাইমফ্রিজস ৩.x ব্যবহার করতে পারেন: এখানে কোনও ভিউস্টেট প্রেরণ করা হয়নি


-1

আমি আমার সমস্যাটি স্থির করে রেখেছি:

<h:commandButton class="btn btn-danger" value = "Remove" action="#{deleteEmployeeBean.delete}"></h:commandButton>

ভিতরে:

<h:form>
     <h:commandButton class="btn btn-danger" value = "Remove" action="#{deleteEmployeeBean.delete}"></h:commandButton>
</h:form>

এটি 600০০ টি upvated উত্তরে # 1। এটি আলাদা উত্তর হিসাবে লেখার দরকার নেই।
কুকলতজে

-1

এই সমাধান, যা আমার জন্য কাজ করা হয়।

<p:commandButton id="b1" value="Save" process="userGroupSetupForm"
                    actionListener="#{userGroupSetupController.saveData()}" 
                    update="growl userGroupList userGroupSetupForm" />

এখানে, প্রক্রিয়া = "ইউজারগ্রুপসেটআপফর্ম" অ্যাট্রিবিউট অ্যাজাক্স কলের জন্য বাধ্যতামূলক। অ্যাকশনলিস্টনার @ ভিউস্কোপ বিন থেকে একটি পদ্ধতি কল করছে। গ্রল বার্তা আপডেট করে, ডেটাটেবল: ইউজারগ্রুপলিস্ট এবং ফর্ম: ইউজারগ্রুপসেটআপফর্ম।


-2
<ui:composition>  
  <h:form id="form1">
    <p:dialog id="dialog1">
      <p:commandButton value="Save" action="#{bean.method1}" /> <!--Working-->
    </p:dialog>
  </h:form>

  <h:form id="form2">
    <p:dialog id="dialog2">
      <p:commandButton value="Save" action="#{bean.method2}" /> <!--Not Working-->
    </p:dialog>
  </h:form>
</ui:composition>

সমাধান করা;

<ui:composition>  
  <h:form id="form1">
    <p:dialog id="dialog1">
      <p:commandButton value="Save" action="#{bean.method1}" />   <!-- Working  -->
    </p:dialog>

    <p:dialog id="dialog2">
      <p:commandButton value="Save" action="#{bean.method2}" />   <!--Working  -->
    </p:dialog>
  </h:form>
  <h:form id="form2">
    <!-- ..........  -->
  </h:form>
</ui:composition>

দুঃখিত, তবে এটি আমার নম্র মতামতে সম্পূর্ণ সত্য নয়। আপনি কার্যকরভাবে বলছেন যে 2 ডায়ালগগুলি কাজ করতে তাদের নিজস্ব ফর্মে থাকা দরকার। আপনার 99% সুনির্দিষ্টতার সাথে আপনি একটি আলাদা সমস্যা সমাধান করেছেন যা আপনি সমাধান করেছেন এবং যার জন্য আপনি এখন মনে করেন এটিই সমাধান ...
কুকল্টজে

এটি পৃষ্ঠা অন্তর্ভুক্ত করা হয়েছে। সম্ভবত এটি সমস্যার কারণ হতে পারে। ভোট দেওয়ার আগে আপনার এটি পরীক্ষা করা উচিত।
কেনান গেকবাক

না, পোস্ট করার আগে আপনার একটি ন্যূনতম প্রজননযোগ্য উদাহরণ তৈরি করা উচিত ছিল (এবং কেবল তখনই আমি পরীক্ষা করতে পারি) ... এবং হ্যাঁ অন্তর্ভুক্তর ফলে ডায়লগ এবং ফর্মগুলির সমস্যা দেখা দিতে পারে তবে সমস্যাটি এখনও আপনি এখানে সমাধান করতে চান বলে মনে হয় না is । আপনার প্রথম উদাহরণটি পুরোপুরি ঠিক আছে এবং দ্বিতীয়টি 100% নিশ্চিততার সাথে একটি অস্তিত্বহীন সমস্যার সমাধান নয়
কুকল্টজে

যাই হোক। আমার আবেদন ভাল কাজ করছে। আমি মনে করি ফর্মটিতে ডায়লগ বাক্সটি গুরুত্বপূর্ণ নয়। আরেকটি সমস্যা সমাধানের জন্য আমাকে একটি দ্বিতীয় ফর্ম তৈরি করতে হবে।
কেনান গোকবাক

আপনার অ্যাপ্লিকেশনটি হয়ত কাজ করছে তবে এটি কোনও মূল সমস্যা এবং আপনার সমাধান থেকে পরিষ্কার / দৃশ্যমান নয়। এ ছাড়া, আপনি বলছেন _ "আমি মনে করি ফর্মটিতে ডায়লগ বাক্সটি কোথায় গুরুত্বপূর্ণ তা নয়" "তবে আপনার উত্তরে মনে হয় এটি কোথায় রয়েছে তা গুরুত্বপূর্ণ important একটি বৈপরীত্য যা আমার বক্তব্যকে সমর্থন করে। দুঃখিত, তবে আপনার উত্তরটি সম্পূর্ণরূপে ভুল ... ... (ইতিমধ্যে
এটিতে আরও একটি ডাউনওয়েট রয়েছে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.