📄 resources.java
字号:
* @param va The Validator Action
* @param field The Validator Field
*/
public static String getMessage(MessageResources messages, Locale locale,
ValidatorAction va, Field field) {
String[] args = getArgs(va.getName(), messages, locale, field);
String msg =
(field.getMsg(va.getName()) != null) ? field.getMsg(va.getName())
: va.getMsg();
return messages.getMessage(locale, msg, args);
}
/**
* Gets the <code>Locale</code> sensitive value based on the key passed
* in.
*
* @param application the servlet context
* @param request the servlet request
* @param defaultMessages The default Message resources
* @param locale The locale
* @param va The Validator Action
* @param field The Validator Field
*/
public static String getMessage(ServletContext application,
HttpServletRequest request, MessageResources defaultMessages,
Locale locale, ValidatorAction va, Field field) {
Msg msg = field.getMessage(va.getName());
if ((msg != null) && !msg.isResource()) {
return msg.getKey();
}
String msgKey = null;
String msgBundle = null;
MessageResources messages = defaultMessages;
if (msg == null) {
msgKey = va.getMsg();
} else {
msgKey = msg.getKey();
msgBundle = msg.getBundle();
if (msg.getBundle() != null) {
messages =
getMessageResources(application, request, msg.getBundle());
}
}
if ((msgKey == null) || (msgKey.length() == 0)) {
return "??? " + va.getName() + "." + field.getProperty() + " ???";
}
// Get the arguments
Arg[] args = field.getArgs(va.getName());
String[] argValues =
getArgValues(application, request, messages, locale, args);
// Return the message
return messages.getMessage(locale, msgKey, argValues);
}
/**
* Gets the <code>ActionMessage</code> based on the
* <code>ValidatorAction</code> message and the <code>Field</code>'s arg
* objects.
* <p>
* <strong>Note:</strong> this method does not respect bundle information
* stored with the field's <msg> or <arg> elements, and localization
* will not work for alternative resource bundles. This method is
* deprecated for this reason, and you should use
* {@link #getActionMessage(Validator,HttpServletRequest,ValidatorAction,Field)}
* instead.
*
* @param request the servlet request
* @param va Validator action
* @param field the validator Field
* @deprecated Use getActionMessage(Validator, HttpServletRequest,
* ValidatorAction, Field) method instead
*/
public static ActionMessage getActionMessage(HttpServletRequest request,
ValidatorAction va, Field field) {
String[] args =
getArgs(va.getName(), getMessageResources(request),
RequestUtils.getUserLocale(request, null), field);
String msg =
(field.getMsg(va.getName()) != null) ? field.getMsg(va.getName())
: va.getMsg();
return new ActionMessage(msg, args);
}
/**
* Gets the <code>ActionMessage</code> based on the
* <code>ValidatorAction</code> message and the <code>Field</code>'s arg
* objects.
*
* @param validator the Validator
* @param request the servlet request
* @param va Validator action
* @param field the validator Field
*/
public static ActionMessage getActionMessage(Validator validator,
HttpServletRequest request, ValidatorAction va, Field field) {
Msg msg = field.getMessage(va.getName());
if ((msg != null) && !msg.isResource()) {
return new ActionMessage(msg.getKey(), false);
}
String msgKey = null;
String msgBundle = null;
if (msg == null) {
msgKey = va.getMsg();
} else {
msgKey = msg.getKey();
msgBundle = msg.getBundle();
}
if ((msgKey == null) || (msgKey.length() == 0)) {
return new ActionMessage("??? " + va.getName() + "."
+ field.getProperty() + " ???", false);
}
ServletContext application =
(ServletContext) validator.getParameterValue(SERVLET_CONTEXT_PARAM);
MessageResources messages =
getMessageResources(application, request, msgBundle);
Locale locale = RequestUtils.getUserLocale(request, null);
Arg[] args = field.getArgs(va.getName());
String[] argValues =
getArgValues(application, request, messages, locale, args);
ActionMessage actionMessage = null;
if (msgBundle == null) {
actionMessage = new ActionMessage(msgKey, argValues);
} else {
String message = messages.getMessage(locale, msgKey, argValues);
actionMessage = new ActionMessage(message, false);
}
return actionMessage;
}
/**
* Gets the message arguments based on the current <code>ValidatorAction</code>
* and <code>Field</code>.
*
* @param actionName action name
* @param messages message resources
* @param locale the locale
* @param field the validator field
*/
public static String[] getArgs(String actionName,
MessageResources messages, Locale locale, Field field) {
String[] argMessages = new String[4];
Arg[] args =
new Arg[] {
field.getArg(actionName, 0), field.getArg(actionName, 1),
field.getArg(actionName, 2), field.getArg(actionName, 3)
};
for (int i = 0; i < args.length; i++) {
if (args[i] == null) {
continue;
}
if (args[i].isResource()) {
argMessages[i] = getMessage(messages, locale, args[i].getKey());
} else {
argMessages[i] = args[i].getKey();
}
}
return argMessages;
}
/**
* Gets the message arguments based on the current <code>ValidatorAction</code>
* and <code>Field</code>.
*
* @param application the servlet context
* @param request the servlet request
* @param defaultMessages Default message resources
* @param locale the locale
* @param args The arguments for the message
*/
private static String[] getArgValues(ServletContext application,
HttpServletRequest request, MessageResources defaultMessages,
Locale locale, Arg[] args) {
if ((args == null) || (args.length == 0)) {
return null;
}
String[] values = new String[args.length];
for (int i = 0; i < args.length; i++) {
if (args[i] != null) {
if (args[i].isResource()) {
MessageResources messages = defaultMessages;
if (args[i].getBundle() != null) {
messages =
getMessageResources(application, request,
args[i].getBundle());
}
values[i] = messages.getMessage(locale, args[i].getKey());
} else {
values[i] = args[i].getKey();
}
}
}
return values;
}
/**
* Initialize the <code>Validator</code> to perform validation.
*
* @param key The key that the validation rules are under (the
* form elements name attribute).
* @param bean The bean validation is being performed on.
* @param application servlet context
* @param request The current request object.
* @param errors The object any errors will be stored in.
* @param page This in conjunction with the page property of a
* <code>Field<code> can control the processing of
* fields. If the field's page is less than or equal
* to this page value, it will be processed.
*/
public static Validator initValidator(String key, Object bean,
ServletContext application, HttpServletRequest request,
ActionMessages errors, int page) {
ValidatorResources resources =
Resources.getValidatorResources(application, request);
Locale locale = RequestUtils.getUserLocale(request, null);
Validator validator = new Validator(resources, key);
validator.setUseContextClassLoader(true);
validator.setPage(page);
validator.setParameter(SERVLET_CONTEXT_PARAM, application);
validator.setParameter(HTTP_SERVLET_REQUEST_PARAM, request);
validator.setParameter(Validator.LOCALE_PARAM, locale);
validator.setParameter(ACTION_MESSAGES_PARAM, errors);
validator.setParameter(Validator.BEAN_PARAM, bean);
return validator;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -