Monday, January 1, 2007

Multilanguage in fixed af:selectOneChoice ADF Faces component

If someone will face a problem how to enable multilanguage support in fixed af:selectOneChoice component, or simply how to bind fixed af:selectOneChoice elements to the property file, hope you will find an answer here. Sample application -, demonstrates how to solve this problem. This sample is based on SRDemo application SRDEMO schema, USERS table. In Model layer Toplnk and EJB are used and in View layer - implemented search form and results table are based on ADF Faces components.

For fixed af:selectOneChoice component is used Users entity, userRole element. userRole is used, because check constraint is enabled for this element on the database level - USER_ROLE IN ('manager','technician','user'). So, it is possible to use only those three constants. You might think - 'everything is fine, I will use simple fixed af:selectOneChoice as ADF Faces component for userRole element'. But, when fixed af:selectOneChoice is created using JDeveloper dialog - JSF component f:selectItems is used for af:selectOneChoice elements.

However, f:selectItems does not provide label/value setting functonality and there is no binding to property file elements. So, search form with by default created fixed af:selectOneChoice will look similar, for user role in dropdown list is used value stored in the database:

To modify default fixed af:selectOneChoice component and bind labels of it's elements to values available in property file, follow steps described below:
  1. Delete JSF component - f:selectItems from af:selectOneChoice in searchUser.jspx page
  2. Add four af:selectItem ADF Faces components into af:selectOneChoice with values - empty selection, 'manager', 'technician' and 'user'
  3. In searchUser.jspx page definition file delete list definition for userRole element. And, create attributeValues definition for userRole element with the same id and item value as it was defined in deleted list definition
  4. Create file and declare three elements in it - 'Manager', 'Technician', 'User'
  5. Bind labels of af:selectItem components to elements declared in file
Now, user role dropdown list labels are populated from file, where multilanguage strings can be defined:

No comments: