public void addUser(){
......
String message = "Duplicate user name. Username already exists";
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage( FacesMessage.SEVERITY_INFO, message, message));
}
But I am getting the following warning and I am not able to Show the error message in the Client Side Page.
WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.sourceId=rstReport:timeHorizonDecoration:timeHorizon[severity=(ERROR 2), summary=(value is required), detail=(value is required)]
The Solution I made as
I have Created a Utility class to add the Error messages into the Current FacesConfig Instance.
import java.util.Iterator;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
public class ErrorMsgUtil {
public static void addError(FacesMessage.Severity severity,String componentId,String messageText){
FacesMessage message = new FacesMessage(messageText);
FacesContext context = FacesContext.getCurrentInstance();
UIComponent component = findComponent(context.getViewRoot(), componentId);
context.addMessage(component.getClientId(context), message);
}
private static UIComponent findComponent(UIComponent parent, String id) {
if(id.equals(parent.getId())) {
return parent;
}
Iterator kids = parent.getFacetsAndChildren();
while(kids.hasNext()) {
UIComponent kid = kids.next();
UIComponent found = findComponent(kid, id);
if(found != null) {
return found;
}
}
return null;
}
}
And I have Called the Error Method as Follows
public void addUser(){
try{
...........
... addUser ... Code
}catch(UserAlreadyExistException e){
String message = "Duplicate user name. Username already exists";
ErrorMsgUtil.addError(FacesMessage.SEVERITY_ERROR,"errorMsg", msg);
}
}
and added one h:message for="errorMsg";
It is working fine for the AJAX4JSF Page implementation.

No comments:
Post a Comment