Some handy JSF utility methods:
import java.io.*;import java.text.*;
import java.util.*;
import javax.faces.application.*;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
import javax.faces.el.ValueBinding;
import javax.servlet.http.HttpSession;
import oracle.adf.view.faces.model.UploadedFile;
public class JSFUtils {
private static final String NO_RESOURCE_FOUND = "Missing resource: ";
/**
* Method for taking a reference to a JSF binding expression and returning
* the matching object (or creating it)
*/
public static Object resolveExpression(FacesContext ctx,
String expression) {
Application app = ctx.getApplication();
ValueBinding bind = app.createValueBinding(expression);
return bind.getValue(ctx);
}
/**
* Convenience method for resolving a reference to a managed bean by name
* rather than by expression
*/
public static Object getManagedBeanValue(FacesContext ctx,
String beanName) {
StringBuffer buff = new StringBuffer("#{");
buff.append(beanName);
buff.append("}");
return resolveExpression(ctx, buff.toString());
}
/**
* Method for setting a new object into a JSF managed bean
* Note: will fail silently if the supplied object does
* not match the type of the managed bean
*/
public static void setExpressionValue(FacesContext ctx, String expression,
Object newValue) {
Application app = ctx.getApplication();
ValueBinding bind = app.createValueBinding(expression);
Class bindClass = bind.getType(ctx);
if (bindClass.isPrimitive()||bindClass.isInstance(newValue)) {
bind.setValue(ctx, newValue);
}
}
/**
* Convenience method for setting the value of a managed bean by name
* rather than by expression
*/
public static void setManagedBeanValue(FacesContext ctx, String beanName,
Object newValue) {
StringBuffer buff = new StringBuffer("#{");
buff.append(beanName);
buff.append("}");
setExpressionValue(ctx, buff.toString(), newValue);
}
/**
* Convenience method for setting Session variables
*/
public static
void storeOnSession(FacesContext ctx, String key, Object object) {
Map sessionState = ctx.getExternalContext().getSessionMap();
sessionState.put(key, object);
}
/**
* Convenience method for getting Session variables
*/
public static Object getFromSession(FacesContext ctx, String key) {
Map sessionState = ctx.getExternalContext().getSessionMap();
return sessionState.get(key);
}
/**
* Pulls a String resource from the property bundle that
* is defined under the application <message-bundle> element in
* the faces config. Respects Locale
*/
public static String getStringFromBundle(String key) {
ResourceBundle bundle = getBundle();
return getStringSafely(bundle, key, null);
}
/**
* Convenience method to construct a <code>FacesMesssage</code>
* from a defined error key and severity
*/
public static FacesMessage getMessageFromBundle(String key,
FacesMessage.Severity severity) {
ResourceBundle bundle = getBundle();
String summary = getStringSafely(bundle, key, null);
String detail = getStringSafely(bundle, key + "_detail", summary);
FacesMessage message = new FacesMessage(summary, detail);
message.setSeverity(severity);
return message;
}
/*
* Internal method to pull out the correct local
* message bundle
*/
private static ResourceBundle getBundle() {
FacesContext ctx = FacesContext.getCurrentInstance();
UIViewRoot uiRoot = ctx.getViewRoot();
Locale locale = uiRoot.getLocale();
ClassLoader ldr = Thread.currentThread().getContextClassLoader();
return ResourceBundle
.getBundle(ctx.getApplication().getMessageBundle(), locale, ldr);
}
/*
* Internal method to proxy for resource keys that don't exist
*/
private static String getStringSafely(ResourceBundle bundle, String key,
String defaultValue) {
String resource = null;
try {
resource = bundle.getString(key);
}
catch (MissingResourceException mrex) {
if (defaultValue != null) {
resource = defaultValue;
} else {
resource = NO_RESOURCE_FOUND + key;
}
}
return resource;
}
/**
*
* @param msg
*/
public static void addFacesErrorMessage(String msg) {
FacesContext ctx = getFacesContext();
FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR,msg,null);
ctx.addMessage(getRootViewComponentId(),fm);
}
/**
*
* @return
*/
public static FacesContext getFacesContext() {
return FacesContext.getCurrentInstance();
}
/**
*
* @return
*/
public static String getRootViewComponentId() {
return getFacesContext().getViewRoot().getId();
}
/**
*
* @param beanname
* @return
*/
public static Object getBeanByName(String beanname) {
FacesContext ctx = getFacesContext();
Application app = ctx.getApplication();
return app.getVariableResolver().resolveVariable(ctx,beanname);
}
public static void addValuesToSession(String key,String value) {
FacesContext context = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) context.getExternalContext().getSession(false);
session.setAttribute(key, value);
}
}
great
ReplyDelete