+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 پاسخ 260 بازدید
سوال شده 9 سال قبل در برنامه نویسی توسط homa (16 امتیاز)
0 امتیاز
1 پاسخ 287 بازدید
0 امتیاز
1 پاسخ 314 بازدید
+1 امتیاز
1 پاسخ 303 بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
0 امتیاز
0 پاسخ 241 بازدید
سوال شده 9 سال قبل در برنامه نویسی توسط homa (16 امتیاز)
0 امتیاز
0 پاسخ 312 بازدید
0 امتیاز
1 پاسخ 279 بازدید
سوال شده 9 سال قبل در برنامه نویسی توسط homa (16 امتیاز)
0 امتیاز
0 پاسخ 366 بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط homa (16 امتیاز)
0 امتیاز
1 پاسخ 296 بازدید
...