本文将分享未指定默认名称空间时,必须将函数getMessageData与前缀一起使用。的详细内容,并且还将对未指定设置为默认的地址进行详尽解释,此外,我们还将为大家带来关于c#–ValidationM
本文将分享未指定默认名称空间时,必须将函数getMessageData与前缀一起使用。的详细内容,并且还将对未指定设置为默认的地址进行详尽解释,此外,我们还将为大家带来关于c# – ValidationMessage与AddModelError(key,message)一起使用.关键是什么?、com.google.protobuf.GeneratedMessage.ExtendableMessage的实例源码、Delphi WinAPI 消息函数 SendMessage函数和 PostMessage的区别、e.getMessage()和e.getLocalizedMessage()之间的区别的相关知识,希望对你有所帮助。
本文目录一览:- 未指定默认名称空间时,必须将函数getMessageData与前缀一起使用。(未指定设置为默认的地址)
- c# – ValidationMessage与AddModelError(key,message)一起使用.关键是什么?
- com.google.protobuf.GeneratedMessage.ExtendableMessage的实例源码
- Delphi WinAPI 消息函数 SendMessage函数和 PostMessage的区别
- e.getMessage()和e.getLocalizedMessage()之间的区别
未指定默认名称空间时,必须将函数getMessageData与前缀一起使用。(未指定设置为默认的地址)
我收到此错误
/WEB-INF/jsp/account/index.jsp(6,0)如果未指定默认名称空间,则必须将getMessageData函数与前缀一起使用
<c:set var="messageData" scope="session" value="${usermap.getMessageData()}"/><c:set var="scheduleData" scope="session" value="${usermap.getScheduleData()}"/><c:set var="meetingData" scope="session" value="${usermap.getMeetingData()}"/>
请注意,我可以在本地Tomcat上运行相同的项目,而不会出现任何错误。
服务器上的Tomcat版本是“ Tomcat 6.0”
答案1
小编典典您的代码的问题在于,本地运行的代码在Tomcat 7上运行,而服务器上运行的代码在Tomcat 6上运行。
()
EL 2.2(及更高版本)的功能是带有参数的方法(那些)的调用,并且它与Servlet 3.0兼容的容器(因此是Tomcat
7)一起运行时,您的代码在本地运行良好。
在Servlet 2.5容器(因此是Tomcat 6)上运行此代码后,您将得到上述错误。
尽管如此,()
两个servlet容器都支持“类似属性”的访问(不带)。
c# – ValidationMessage与AddModelError(key,message)一起使用.关键是什么?
在.cshtml文件中,我把这个:
@Html.DropDownListFor(model => model.EntityType.ParentId,Model.ParentTypeList,"") @Html.ValidationMessageFor(model => model.EntityType.ParentId)
在控制器中进行业务验证
catch (BusinessException e) { ModelState.AddModelError("EntityType.ParentId",Messages.CircularReference); }
以上工作如预期:如果捕获到异常,该消息将出现在下拉列表旁边.
但是,我觉得这样做不是很优雅.在cshtml中,我使用一种方法生成有关验证的所有必需信息.在控制器中,我必须知道确切的Key字符串并使用它.
是不是有更好的方法呢?
解决方法
public static class ModelStateExtensions { public static void AddModelError<TModel,TProperty>( this ModelStateDictionary modelState,Expression<Func<TModel,TProperty>> ex,string message ) { var key = ExpressionHelper.GetExpressionText(ex); modelState.AddModelError(key,message); } }
然后使用这种方法:
catch (BusinessException e) { ModelState.AddModelError<Myviewmodel,int>( x => x.EntityType.ParentId,Messages.CircularReference ); }
com.google.protobuf.GeneratedMessage.ExtendableMessage的实例源码
private <MType extends ExtendableMessage<MType>,BType extends ExtendableBuilder<MType,BType>> boolean resolveUninterpretedOptions( final BType optionsBuilder,final FieldDescriptor uninterpretedField) { ensureRegistry(); boolean anyUninterpetedOptionResolved = false; @SuppressWarnings("unchecked") final List<UninterpretedOption> options = new ArrayList<UninterpretedOption>( (List<UninterpretedOption>) optionsBuilder.getField(uninterpretedField)); for (final Iterator<UninterpretedOption> iterator = options.iterator(); iterator.hasNext();) { final UninterpretedOption option = iterator.next(); if (resolveUninterpretedOption(option,optionsBuilder)) { anyUninterpetedOptionResolved = true; iterator.remove(); } } if (options.isEmpty()) { optionsBuilder.clearField(uninterpretedField); } else { optionsBuilder.setField(uninterpretedField,options); } return anyUninterpetedOptionResolved; }
private <MType extends ExtendableMessage<MType>,BType>> boolean resolveUninterpretedOption( final UninterpretedOptionorBuilder option,final BType optionsBuilder) { if (option.getNameCount() == 0) { throw new IllegalArgumentException("custom option cannot be empty"); } if (!option.getName(0).getIsExtension()) { throw new IllegalArgumentException("custom option name should start with '('"); } final Map.Entry<FieldDescriptor,Object> fieldValue; if (option.getNameCount() == 1) { fieldValue = processUninterpretedOptionValue(option,optionsBuilder); } else { fieldValue = processUninterpretedOptionMessage(option,optionsBuilder); } if (fieldValue == null) { return false; } final FieldDescriptor field = fieldValue.getKey(); final Object value = fieldValue.getValue(); if (field == null || value == null) { // the UninterpretedOption is not resolved return false; } if (field.isRepeated()) { optionsBuilder.addRepeatedField(field,value); } else { optionsBuilder.setField(field,value); } return true; }
private <MType extends ExtendableMessage<MType>,BType>> boolean buildOptions( final BType optionsBuilder) { final FieldDescriptor uninterpretedField = getFD(optionsBuilder,UNINTERPRETED_OPTION_FIELD_NUMBER); final boolean isUninterpretedEmpty = optionsBuilder.getRepeatedFieldCount(uninterpretedField) == 0; final boolean anyUninterpetedOptionResolved = !isUninterpretedEmpty && resolveUninterpretedOptions(optionsBuilder,uninterpretedField); final boolean isUnkNownFieldsEmpty = optionsBuilder.getUnkNownFields().asMap().isEmpty(); Map<FieldDescriptor,Object> allFields = null; if (isUninterpretedEmpty && isUnkNownFieldsEmpty) { allFields = optionsBuilder.getAllFields(); if (allFields.isEmpty()) { return false; } } if (customOptionsAsExtensions) { if (!isUnkNownFieldsEmpty) { reparseBuilder(optionsBuilder,ensureRegistry()); } } else { boolean anyExtension = anyUninterpetedOptionResolved; if (!anyUninterpetedOptionResolved) { if (allFields == null) { allFields = optionsBuilder.getAllFields(); } for (final FieldDescriptor fd : allFields.keySet()) { if (fd.isExtension()) { anyExtension = true; break; } } } if (anyExtension) { reparseBuilder(optionsBuilder,ExtensionRegistry.getEmptyRegistry()); } } return true; }
Delphi WinAPI 消息函数 SendMessage函数和 PostMessage的区别
SendMessage函数 将指定的消息发到窗口。它调用特定窗口的窗口处理函数,并且不会立即返回,直到窗口处理函数处理了这个消息。
PostMessage函数 将一个消息放入与创建这个窗口的消息队列相关的线程中,并立刻返回不等待线程处理消息。
SendMessage是发送消息,然后等待处理完成返回,但发送消息的方法为直接调用消息处理函数(即WndProc函数),按照函数调用规则,肯定会等消息处理函数返回之后,SendMessage才返回。而PostMessage却没有发送消息,PostMessage是将消息放入消息队列中,然后立刻返回,至于消息何时被处理,PostMessage完全不知道,此时只有消息循环知道被PostMessage的消息何时被处理了。
例句:
向按钮(Button)发送单击:
SendMessage:
SendMessage(Button1.Handle, WM_LBUTTONDOWN, 0, 0);
SendMessage(Button1.Handle, WM_LBUTTONUP, 0, 0);
PostMessage:
PostMessage(Button1.Handle, WM_LBUTTONDOWN, 0, 0);
PostMessage(Button1.Handle, WM_LBUTTONUP, 0, 0);
e.getMessage()和e.getLocalizedMessage()之间的区别
- 我在执行错误处理时同时使用这两种方法来获取catch块抛出的消息
- 他们俩都从错误处理中得到了我的消息,但是两者的区别到底是什么
- 我从互联网上搜索了一些内容,然后从这里想出了这个答案
Java异常从Throwable继承其getMessage和getLocalizedMessage方法(请参见相关链接)。区别在于子类应重写getLocalizedMessage以提供特定于语言环境的消息。例如,想象一下您正在将代码从一个说英语的公司/组改编为一个英语-
英语组。您可能需要创建自定义Exception类,该类将覆盖getLocalizedMessage,以将拼写和语法正确化为将使用您的代码的用户和开发人员所期望的内容。这也可以用于异常消息的实际翻译。
问题 ::
这意味着
language specific
实现吗?就像如果我使用e.getLocalizedMessage()
我的应用程序English
-错误将被抛出English
,如果我使用我的应用程序Spanish
-那么错误将被抛出Spanish
需要在何时何地可以使用这些方法的清楚说明
答案1
小编典典就像上面每个人都提到的
据我了解,getMessage()
返回异常的名称。getLocalizedMessage()
以用户的本地语言(中文,日语等)返回异常的名称。为了使此工作正常,您正在调用的类getLocalizedMessage()
必须已重写该getLocalizedMessage()
方法。如果没有,则调用其中一个超类的方法,默认情况下,该方法仅返回getMessage的结果。
除此之外,我想放置一些代码段来解释如何使用它。
如何使用它
Java并没有提供任何神奇的功能,但是它确实提供了一种使我们的生活更轻松的方法。为了getLocalizedMessage()
有效使用,我们必须覆盖默认行为。
import java.util.ResourceBundle;public class MyLocalizedThrowable extends Throwable { ResourceBundle labels = ResourceBundle.getBundle("loc.exc.test.message"); private static final long serialVersionUID = 1L; public MyLocalizedThrowable(String messageKey) { super(messageKey); } public String getLocalizedMessage() { return labels.getString(getMessage()); }}
java.util.ResourceBundle
用于进行本地化。
在此示例中,您必须在loc/exc/test
路径中放置特定于语言的属性文件。例如:
message_fr.properties(包含一些键和值):
key1=this is key one in France
message.properties(包含一些键和值):
key1=this is key one in English
现在,让我们假设我们的异常生成器类类似于
public class ExceptionGenerator { public void generateException() throws MyLocalizedThrowable { throw new MyLocalizedThrowable("key1"); }}
主要类别是:
public static void main(String[] args) { //Locale.setDefault(Locale.FRANCE); ExceptionGenerator eg = new ExceptionGenerator(); try { eg.generateException(); } catch (MyLocalizedThrowable e) { System.out.println(e.getLocalizedMessage()); }}
默认情况下,如果您在“英语”环境中执行,它将返回“英语”键值。如果将本地设置为法国,则将从message_fr文件获取输出。
什么时候使用
如果您的应用程序需要支持l10n /
i18n,则需要使用它。但是大多数应用程序并不需要,因为大多数错误消息不是针对最终客户的,而是针对支持工程师/开发工程师的。
关于未指定默认名称空间时,必须将函数getMessageData与前缀一起使用。和未指定设置为默认的地址的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于c# – ValidationMessage与AddModelError(key,message)一起使用.关键是什么?、com.google.protobuf.GeneratedMessage.ExtendableMessage的实例源码、Delphi WinAPI 消息函数 SendMessage函数和 PostMessage的区别、e.getMessage()和e.getLocalizedMessage()之间的区别等相关知识的信息别忘了在本站进行查找喔。
本文标签: