[
https://issues.jboss.org/browse/RF-10940?page=com.atlassian.jira.plugin.s...
]
Brian Leathem commented on RF-10940:
------------------------------------
I took a close look at this, and found that indeed the a4j framework is being smart about
not including duplicate javascript function definitions. The problem is that when the
part of the page is re-rendered, the reference to the original javascript method is lost.
As a workaround (which may not fit your use case), you can wrap all the ajax validation
components in an a4j:outputPanel, as in:
{code}
<!DOCTYPE html>
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a="http://richfaces.org/a4j"
xmlns:rich-in="http://richfaces.org/input"
xmlns:rich-v="http://richfaces.org/csv">
<f:view>
<h:head>
<title>Calendar Validation Test</title>
</h:head>
<h:body>
<h:form>
<h:outputLabel value="Start date" for="#{startDate}"
/>
<a:outputPanel id="datePanel">
<rich-in:calendar id="startDate"
value="#{calendarTestBean.startDate}">
<rich-v:validator />
</rich-in:calendar>
<h:outputLabel value="End date" for="#{endDate}"
/>
<rich-in:calendar id="endDate"
value="#{calendarTestBean.endDate}">
<rich-v:validator />
</rich-in:calendar>
</a:outputPanel>
<a:commandButton value="Rerender end date"
render="endDatePanel" />
</h:form>
</h:body>
</f:view>
</html>
{code}
This way, the components are aware of the shared javascript methods on each page
re-render.
To *actually* fix the problem, I believe we have to disable the logic that prevents
duplicate (logically) javascript functions from being defined. This seems like a
backwards step, so I'd like to investigate if it makes sense before proceeding.
Client side validation refers to non existing javascript function
-----------------------------------------------------------------
Key: RF-10940
URL:
https://issues.jboss.org/browse/RF-10940
Project: RichFaces
Issue Type: Bug
Security Level: Public(Everyone can see)
Components: component-validators
Affects Versions: 4.0.0.Final
Reporter: Niels Soeffers
Assignee: Brian Leathem
Priority: Critical
Labels: tran
Fix For: 4.1.0.Milestone2
Client Side Javascript functions are called on the component tags (for example onChange
attribute) and defined at the bottom of the rendered page. We encountered a case where the
function called in the onchange attribute is not defined at the bottom of the page.
Our domain layer contains two different classes RG and SRG (they do not inherit from each
other). However they both embed an embeddable class E with a field "name"
In the GUI we have a page with a single form and two regions. One for adding a RG object
and one for adding a SRG object. Both regions contain a h:inputText for the
"name" field. So the first inputText is bound to {{RG.embedded.name}} and the
second on {{SRG.embedded.name}}. Both inputTexts have a rich:validator tag as a child
component.
When the page is initially rendered both h:inputText have the same javascript function
referred to in their onchange attribute (RGName_3Av).
Which is not wrong because the validation (@NotNull on the "name" field in the
Embedded class) is the same for both value bindings. It is a little bit confusing to see a
method with a name of RGName_3Av on a component that is actually bound to SRG and so we
would expect the method to call SRGName_3Av, but it's certainly not wrong and I even
find it a very nice optimization.
However when we click on an a:commandButton in the second region and rerender this second
region, then suddenly the javascript function in the onchange attribute of the second
inputText is changed and the name refers to the SRG component (SRGName_3Av), but this
javascript method is never defined, because it was optimized when we initially rendered
the complete page.
Hope you can reproduce the problem with the above description and fix the problem or
provide a workaround?
Kind Regards,
Niels
--
This message is automatically generated by JIRA.
For more information on JIRA, see:
http://www.atlassian.com/software/jira