Facing an issue with dropdown component in my application: This is about notorious error : “Validation Error: Value is not valid”.
Issue description:
I have a dropdown which is binded to an instance of BoundPropertiesSelectItemGroupProvider. The source for this provider is List of SelectItem instances.
In the same page, I have one command button and another simple button.
My intended functionality is:
On click of command button, control needs to go to server side and execute an action. Hence binded an action to the command button.
On click of simple button, a new child page need to be opened (im using window.open() ) which inturn has command buttons to perform some operations in Child window.
Here the issue is, after opening child window on click of simple button, and using command buttons available in the child window,
if I select a value from dropdown present in parent window and click on command button (which is present in parent window), im getting an error “Validation Error: Value is not valid”
Workaround # 1: On click of Simple button, in the window.open() along with the URL for child page, if I pass additional parameter “hiddenRequest = true” then “Validation Error: Value is not valid” error is not occuring. - But using hiddenRequest parameter is causing another issue which is mentioned here: http://tech.forums.softwareag.com/viewtopic.php?t=23793&sid=f2824494669c25caf5d2ca345fce73df
Please find the attached sample package depicting the scenarios.
Could you please let me know how can the error “Validation Error: Value is not valid” be resolved ?
Kind regards,
Raja sekhar Kintali SAGUpload.zip (33.8 KB)
But unfortunately, in my application, I don’t think changing command button to Async cmd button is feasible - as in each child window, Iam opening tabbed view of more than 10 different portlets and in each portlet there are number of command buttons to address. The same case with parent windows.
Second reason is if I use async cmd inplace of command btn, Im getting an exception when routing to another page using sendRedirect method in server side action. (This is because async cmd response stream has already been committed to render the same page)
Is it not allowed to use SelectItem list to populate dropdowns if the parent and child windows has command buttons?
Thanks to a colleague, i figured out what was going on… The Page Bean of the Parent Portlet was expiring when navigating to and interacting with the Child Portlet Page Bean.
All you need to do is change the Managed Property, “expireWithPageFlow” of the Parent Portlet Page Bean (ParentPortletDefaultviewView) to be false. (See screenshot)
Once that is set, you’ll be able to continue to interact with the Parent Portlet while switching back and forth to the Child Portlet.
Validation Error: Value is not valid error should not come - keeping the following conditions true:
a) should be able to use command buttons in parent and child windows.
b) Pages should be reinitialized whenever user comes back to the same page. ( expireWithPageFlow setting to true)
If I use hiddenRequest parameter → then it is not reinitializing the page.
And I can not deliberately set expireWithPageFlow property to false as the pages has to be re initialized on each time user comes to the same page from other pages.
Not sure if this can be achieved keeping both a and b conditions to true
I’m not sure if i follow all the use cases, but if you have expirePageFlow set to false and you need to reset the state, then your best bet is to use the ExtendedPortletURL when navigating back to the page and set the ‘resetState’ to true.
1. Set the ExpireWithPageFlow of BasePageBean (Bean Class of your View that extends BasePageBean) to true
2. Set the ExpireWithPageFlow of BaseFacesPreferencesBean (Preferences Bean Class of your View that extends BaseFacesPreferencesBean) to false
3. Make sure that “&wmp_rs=true” parameter is set in your URL.
Note: I have seen that even though you set the property for Reset State as true in your XPU Control, it sometimes does not pass this in the URL parameter and the target portlet hence does not know that it has to reset its state. (I almost wrote taste) :lol:. Hence, I have not used the XPU control but instead I am building the URL with its parameters in JS and calling it using window.open which allows me to control the window look and feel properties like hiding status bar, address bar etc…
Hopefully, this will bring truce between parties “a” and “b”.
Question:
If you want the new preferences set on the target portlet from its parent portlet to be considered during its re-initialization, you would want to set the ExpireWithPageFlow for the BaseFacesPreferencesBeanto true, wouldn’t you? Apparently not :!: Why :?: I donno :roll: