برای 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 داشته باشه.