لماذا مطلوب= "صحيح"لا يتم تشغيله عند تقديمه="خطأ"
-
21-12-2019 - |
سؤال
لدي بعض الشكوك حول تحليل علامات هتمل في فاسيليت.دعونا لدينا فاسيليت الذي يحتوي على ما يلي
<h:inputText id="username"
title="My name is: "
value="#{hello.name}"
required="true"
requiredMessage="Error: A name is required."
rendered="false"
maxlength="25" />
<h:commandButton id="submit" value="Submit" action="response">
</h:commandButton>
بعد إرسال انقر أنا لم Error: A name is required
.لم؟ username
فقط لم تصدر ، وبعد submit
انقر فوق لا توجد قيمة في username
.
المحلول
ال rendered
يتم تقييم السمة أيضا أثناء مراحل التحقق وتحديث قيم النموذج.للحصول على أدلة ، تحقق javax.faces.component.UIInput
شفرة المصدر (أرقام الأسطر حسب موجارا 2.2.0):
696 public void processValidators(FacesContext context) {
697
698 if (context == null) {
699 throw new NullPointerException();
700 }
701
702 // Skip processing if our rendered flag is false
703 if (!isRendered()) {
704 return;
705 }
...
...
...
735 public void processUpdates(FacesContext context) {
736
737 if (context == null) {
738 throw new NullPointerException();
739 }
740
741 // Skip processing if our rendered flag is false
742 if (!isRendered()) {
743 return;
744 }
التفسير بسيط:هذا هو حماية ضد العبث (المخادعة/اختراق) طلبات هتب حيث المستخدمين النهائيين التلاعب هادف طلب هتب في محاولة لتعيين القيم و/أو استدعاء إجراءات المدخلات/الأوامر المخفية التي هم على الأرجح ببساطة لا يسمح لتحديث أو استدعاء ، مثل زر حذف الذي يظهر فقط عندما يكون للمستخدم دور المشرف:
<h:commandButton value="Delete" ... rendered="#{request.isUserInRole('ADMIN')}" />
ملاحظة:المكون readonly
و disabled
يتم التعامل مع السمات أيضا بهذه الطريقة.لغرضك الخاص ، استخدم كس display: none
بدلا من ذلك.
<h:inputText ... style="display:none" />
(ملاحظة:هذا هو مثال انطلاق المباراة ، وذلك باستخدام style
السمة هي ممارسة سيئة في منظور هتمل / كس ، تفضل styleClass
مع ملف كس ملموسة)
على الرغم من أنني أتساءل عن المتطلبات الوظيفية الملموسة وراء ذلك ، إلا أن هذا أمر سيء لتجربة المستخدم.ربما كنت مجرد تجريب عشوائيا حولها دون دراسة الأولى جسف مواصفات ناهيك جسف شفرة المصدر?