[ https://issues.apache.org/jira/browse/MYFACES-4055?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Thomas Andraschko resolved MYFACES-4055. ---------------------------------------- Resolution: Won't Fix MyFaces does the same as Mojarra currently. I think we can close it as wont fix for now. Feel free to create a spec issue if you would like to see in the next versions. > Localized JSF error and information messages not displayed > ---------------------------------------------------------- > > Key: MYFACES-4055 > URL: https://issues.apache.org/jira/browse/MYFACES-4055 > Project: MyFaces Core > Issue Type: Improvement > Components: JSR-344 > Affects Versions: 2.2.10 > Environment: Java 8, TomEE 7, Primefaces 6.0, Omnifaces 2.3 > Reporter: Petras > Priority: Major > Labels: localization, messages > Attachments: full-submit.png, partial-submit.png > > > I have localized JSF error and information messages as described in JSR-344 > Section "2.5.2.4 Localized Application Messages", which defines how > applications may provide own JSF messages, and prepared resource bundle > "javax.faces.Messages". In _faces-config.xml_ I set: > {{<message-bundle>javax.faces.Messages</message-bundle>}}. > But these resources are not always used, when value validation in UI input > component fail. Consider the following snippet which illustrates the issue. > It contains 2 input text fields, the first one has "required" attribute. The > second field is validated using Bean Validation framework: > {code:xml} > <h:form id="form"> > <p:panel header="Validate"> > <h:panelGrid columns="3" cellpadding="5"> > > <!-- JSF validation --> > <h:outputLabel for="client1" value="JSF Validation" /> > <h:inputText id="client1" label="JSF Validation" > value="#{validationModel.requiredClient}" required="true"/> > <h:message for="client1" display="both" errorStyle="color: red" /> > > <!-- Bean validation --> > <h:outputLabel for="bean0" value="Bean Validation" /> > <h:inputText id="bean0" label="Bean Validation" > value="#{validationModel.requiredAnnotated}" /> > <h:message for="bean0" display="both" errorStyle="color: red" /> > </h:panelGrid> > <!-- submit without ajax --> > <h:commandButton value="Save" action="#{validationModel.save}" /> > <!-- submit with ajax --> > <h:commandButton value="Save (ajax)" > actionListener="#{validationModel.save}" > > <f:ajax execute="form" render="form"/> > </h:commandButton> > </p:panel> > </h:form> > {code} > The backing bean: > {code:java} > @Named @RequestScoped > public class ValidationModel implements DecisionProcessable { > @NotNull @Length(min = 1, max = 64) > private String requiredAnnotated; > private String requiredClient; > // getters and setters > public void save() { > System.out.println(this); > } > } > {code} > If I click the button "Save", which performs full submit, I get localized > error message. If I click "Save (ajax)", which performs partial submit with > ajax, the JSF validation error message is not localized. > I did some debugging and noticed that validation logic uses {{_MessageUtils}} > class to obtain resource bundle for the messages, but this utility class uses > FacesContext class ClassLoader to find resource bundle. The problem is that > this ClassLoader does not always refer to web application classloader. When > the partial submit is performed, it refers to Tomcat common classloader, > which surely does not see web application resources. > The fix probably would be the same as implemented in {{MessageUtils}}, which > uses Thread.currentThread().getContextClassLoader() on ResourceBundle > (MYFACES-338). -- This message was sent by Atlassian Jira (v8.3.4#803005)