Recently I was experimenting with LOV component provided by JDeveloper 11g Technology Preview 3. What I can say - if you are planning to use this component with current JDeveloper 11g TP3, you definitely will face some issues. However, in this post I will describe two workarounds I found, hopefully this will be helpful until next JDeveloper 11g Technology Preview will be released.
Sample application - LOV11.zip is based on two problems and implements workarounds I have described in OTN forum. I will describe those two problems and workarounds I found.
1. LOV with Read-Only View object (Server Exception during PPR, #1)
First problem I faced was Server Exception during PPR error. This exception was generated right after some value in LOV was selected and OK button was pressed. So, in other words LOV wasn't working:
LOV component was based on Read-Only View object, I have created this View object separately - with New View Object... wizard.
However, when I have tested Model layer with Oracle Business Components Browser everything was working fine. So, LOV wasn't working in ADF Faces Rich Client, but was working when testing Model layer. I decided to create new Read-Only View object with Business Components from Tables wizard and to test it with LOV component - it was working. I have compared two Read-Only View objects and noticed that there was only one difference - Key Attribute wasn't set for View object generated with New View Object... wizard:
I have set Key Attribute in JobsLovView, and LOV started to work as it should work. But, I have faced other issue - incorrect behavior in Create form.
2. LOV issue in Create form with Mandatory fields
Let's say we have Create form, all fields in Create form are empty and some fields are indicated as mandatory ones:
Everything seems clear and correct, but when user will try to set value from LOV component - validation errors will be generated. Validation errors for all empty mandatory fields, you should agree this is quite strange behavior - it's impossible to use LOV component until other mandatory fields are empty. LOV component is opened, but when value is selected and submit button is pressed, similar screen is shown:
Problem is described, but how to solve it? One solution is to wait for next JDeveloper 11g Technology Preview release, other solution is to find workaround. My suggested workaround is to remove standard ADF Business Components validation for mandatory fields and implement custom validation. Also, its even possible not to implement custom validation in ADF, in this case validation will be done on database side.
In this post I will describe how to implement custom validation in ADF. First, deselect all Mandatory fields, available in Create form where LOV components are used:
In Create form, set for all mandatory fields, ShowRequired property to true. This will inform user about required fields in the form:
Custom validation will be done, when user will try to submit form data into database. So, we can create Action method for Save button and check all required values there:
Custom validation code in saveButton_action() method is straightforward:
Sample application implements both described workarounds. Value in LOV component can be successfully selected and returned into Create form:
Value in LOV component is selected and data in other fields is provided also, data in Create form is ready to be submitted into database:
We can test, how implemented custom validation works. Let's say value in Email field is removed and Save button is pressed - validation logic in Backing bean catches this and prints error message: