On 3/23/07, Daniel Hannum <[EMAIL PROTECTED]> wrote:
This may be a basic JSF question... I'm not sure.
I have a component on a page that is bound to a backing bean member.
During page logic, I use setDisabled(true) to disable the component
under some conditions. Now, after the form is submitted, JSF seems to
reinject new component objects into my backing bean. So, the next time
the page is displayed, loses the disabled state. I didn't know it would
do this. I guess I thought I would get to keep my component instances
and not have new ones given to me on each request.
As far as a solution goes, I guess I could put logic in the getter
(getMyComponent()) for figuring out if we should be disabled or not.
That way it would always be done, but it seems inefficient to do it
every time.
If checking disabled is an expensive operation, then cache the result, e.g.
public boolean isDisabled() {
if(this.disabled == null) {
this.disabled = expensiveCalculation();
}
return disabled;
}
But you'll need some other logic to determine if disabled needs to be
reevaluated, unless your bean is request scoped.
Does that seem like the best solution? I know putting the logic in the
markup itself would also work, though I think I need to do more than EL
can do (I need to check if a radio button has a particular value).
Then probably you should be checking if the property the radio button
is bound to has a particular value, rather than checking the actual
radio button. e.g.
<tr:selectBooleanRadio value="#{myBean.disable}"/>
<yourComponent disabled="#{myBean.disable}"/>