For example, I need to change attribute's label and make it readonly on the fly. In my ViewObjectImpl class I have the following method:
public void setCustomHints() {
AttributeDefImpl attr = ((AttributeDefImpl) findAttributeDef("DepartmentName"));
attr.setProperty("customLabel", "The custom label");
attr.setProperty("readonly", Boolean.TRUE);
}
The setCustomHints method is going to be executed on a commandButton's action. And the jspx page contains the following piece of code:
<af:inputText value="#{bindings.DepartmentName.inputValue}"
label="#{bindings.DepartmentName.hints.customLabel}"
readonly="#{bindings.DepartmentName.hints.readonly}"
columns="#{bindings.DepartmentName.hints.displayWidth}"
maximumLength="#{bindings.DepartmentName.hints.precision}"
shortDesc="#{bindings.DepartmentName.hints.tooltip}"
id="it4" partialTriggers="cb1">
<f:validator binding="#{bindings.DepartmentName.validator}"/>
</af:inputText>
<af:commandButton actionListener="#{bindings.setCustomHints.execute}"
text="setCustomHints"
disabled="#{!bindings.setCustomHints.enabled}"
id="cb1"/>
Additionally, I set up default values for customLabel and readonly custom properties at the VO's definition page:
And finally, we've got the following result:

The sample application for this post is available.

Eugene,
ReplyDeleteNice post - however for the specific use case (determine at runtime if the attribute should be updatable) - you should just override isAttributeUpdatable()
The concept is a good one, though
:)
john
Hi John!
ReplyDeleteYes, you are right. But this is just an example of passing a value for any attribute from the model layer.