+4 امتیاز
قبل در برنامه نویسی توسط (1.4هزار امتیاز)
ویرایش شده قبل توسط

می خواهم تحت شرایطی، یک textbox رو در facelet ام (facelet ام از نوع edit هست) disable کنم (و در غیر این صورت enable بمونه). برای اینکار هر وقت که میخام disable کنم، باید ویژگی disabled رو به textbox ام اضافه کنم؛ هر وقت هم که میخام enable کنم، باید این ویژگی رو (در صورت وجود) از textbox حذف کنم (متاسفانه با css این کار (disable/enable کردن) رو نمی توان انجام داد). برای انجام این کار باید چه کار کنم؟

textbox ام:

<c:textbox id="codeInput" value="${entity.code}"
	title="@{msg['workshop_code']}" required="true" 
	converter="java.lang.String" label="@{msg['workshop_code']}" >
	<c:lengthvalidator min="10" max="10"  />
</c:textbox>

شرطی که میخام برقرار باشه تا textbox ام رو disable/enable کنم:

${creating}

که این متغیر در onsuccess فرم مقدار دهی می شود: 

<c:set property="${creating}" value="${ID} == null" />

در حالت عادی (که با html کار میکنیم) می تونیم با داشتن id ِاون textbox و javascript، این کار رو انجام بدیم (که توی facelet بلد نیستم).

1 پاسخ

+3 امتیاز
قبل توسط (110 امتیاز)
انتخاب شده قبل توسط
 
بهترین پاسخ

برای disable کردن یک textbox دو راه وجود داره:

1- استفاده از خصیصه "disabled" تعریف شده در html، یک قانون کلی روی همه کامپوننت های UI در facelet وجود داره اونم اینه که همه خصیصه های تعریف شده برای تگ های html را شما میتونید توی کامپوننت های facelet هم استفاده کنید. در این حالت کدتون بصورت زیر در میاد:

 




<c:textbox id="codeInput" value="${entity.code}"
    title="@{msg['workshop_code']}" required="true"
    converter="java.lang.String" label="@{msg['workshop_code']}" disabled="disabled">
    <c:lengthvalidator min="10" max="10"  />
</c:textbox>

2- استفاده از جاوا اسکریپت، در facelet با استفاده از تگ <script> که در فضای کاری، http://gfaces.org/core قرار داره میشه کد جاوااسکریپت نوشت برای این منظور متدی تو فایل facelet بصورت زیر تعریف کنید:

 

<c:method id="initWidgets">
	<c:if test="${ID} != null">
		<c:then>
			<c:script>
				$wnd.document.getElementById("codeInput").setAttribute("disabled","disabled");
			</c:script>
		</c:then>
		<c:else>
			<c:script>
				$wnd.document.getElementById("codeInput").removeAttribute("disabled");
			</c:script>
		</c:else>
	</c:if>
</c:method>

این متد رو بعد از render شدن صفحه در تک renderHandler فراخوانی کنید.

در مسئله شما فقط راه حل دوم میتونه مورد استفاده واقع بشه چون میخواین بصورت شرطی عملیات disabled شدن رو انجام یدید و در html نمیتوان value خصیصه disabled رو طوری تغییر داد که معنی enabled داشته باشه.

سوالات مشابه

0 امتیاز
0 پاسخ 268 بازدید
سوال شده 9 سال قبل در برنامه نویسی توسط homa (16 امتیاز)
0 امتیاز
1 پاسخ 295 بازدید
0 امتیاز
1 پاسخ 335 بازدید
+1 امتیاز
1 پاسخ 311 بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
0 امتیاز
0 پاسخ 249 بازدید
سوال شده 9 سال قبل در برنامه نویسی توسط homa (16 امتیاز)
0 امتیاز
0 پاسخ 323 بازدید
0 امتیاز
1 پاسخ 291 بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط homa (16 امتیاز)
0 امتیاز
0 پاسخ 386 بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط homa (16 امتیاز)
0 امتیاز
1 پاسخ 305 بازدید
...