我们正在为在Java 5上运行的Web应用程序本地化用户界面文本,并且我们如何输出在属性文件中定义的消息(java.util.Properties使用的类型)的困境.
某些消息包含将使用java.text.MessageFormat填充的占位符.例如:
search.summary = Your search for {0} found {1} items.
Run Code Online (Sandbox Code Playgroud)
MessageFormat很烦人,因为单引号是一个特殊字符,尽管在英文文本中很常见.您必须输入两个文字单引号:
warning.item = This item''s {0} is not valid.
Run Code Online (Sandbox Code Playgroud)
但是,应用程序1000个左右的消息中有四分之三不包含占位符.这意味着我们可以直接输出它们,避免使用MessageFormat,并保留单引号:
help.url = The web page's URL
Run Code Online (Sandbox Code Playgroud)
问题:我们应该为所有消息使用MessageFormat,以获得一致的语法,还是尽可能避免使用MessageFormat,因此大多数消息都不需要转义?
无论哪种方式都有明显的优点和缺点.
请注意,MessageFormat的API文档确认了该问题,并提出了一个非解决方案:
遗憾的是,在消息格式模式中使用引号的规则显示有些令人困惑.特别是,对于本地化者来说,单引号是否需要加倍并不总是显而易见的.确保通知本地化程序有关规则,并告诉他们(例如,通过使用资源包源文件中的注释)MessageFormat将处理哪些字符串.
我有一个学校项目,我必须使用Java.最近我找到了play框架,我想尝试使用它.这很容易快速启动,但我遇到了会话问题.
就其本质而言是无状态的,play会在cookie中将整个会话发送给用户并在下一个请求时接收它,因此它只允许会话中有限的数据量.
我想要做的是在用户登录时从数据库中获取User对象,并将其保存在会话中,这样我就可以从模板中访问它等等(我在User类中有一些方法需要调用以便自定义UI ),但如果我放置User对象,则调用其toString方法并将其放入会话中.
我发现推荐的方法是将大量数据放入Cache中,但我不知道如何从模板中访问它(我想我可以用@Before注释创建方法并将用户添加到renderArgs,但这似乎不太给我干净)另一个问题是Cache的生命周期有限,所以我的对象可能会消失.
有没有人有这种问题的经验?
有没有办法使用服务器端会话?我不需要这个项目的REST功能,因此,就我而言,应用程序可以保存状态...
我有一个查询返回Person我正用于从数据库中获取一页结果的对象:
def page(pageNumber:Int, pageSize:Int) : Seq[Person] = database.withSession {
val query = for(person <- People) yield person.mapped
val startIndex = (pageNumber - 1) * pageSize
query.list.slice(startIndex, startIndex + pageSize)
}
Run Code Online (Sandbox Code Playgroud)
这有效,但我想知道我是否可以在数据库中进行分页,方法与javax.persistence.QueryAPI setFirstResult和setMaxResults方法相同,而不是slice在结果列表中使用.
getEmployeeNameByBatchId(int batchID)
getEmployeeNameBySSN(Object SSN)
getEmployeeNameByEmailId(String emailID)
getEmployeeNameBySalaryAccount(SalaryAccount salaryAccount)
要么
getEmployeeName(int typeOfIdentifier,byte [] identifier) - >在这个方法中,typeOfIdentifier告诉标识符是否为batchID/SSN/emailID/salaryAccount
以上哪一种更好的方法实现了get方法?
这些方法将在Servlet中,并且将从将提供给客户的API进行调用.
我想使用标准图标,如搜索,下载,联系人,设置和列表.其中大多数都存在于App Store等应用程序中,但我不知道如何检索它们.
谢谢
使用Java Persistence API(带注释的实体)时,启用Hibernate的二级缓存需要哪些步骤?我该如何检查它是否正常工作?我正在使用JBoss 4.2.2.GA.
从Hibernate文档中,我似乎需要启用缓存并在persistence.xml中指定缓存提供程序,如:
<property name="hibernate.cache.use_second_level_cache"
value="true" />
<property name="hibernate.cache.provider_class"
value="org.hibernate.cache.HashtableCacheProvider" />
Run Code Online (Sandbox Code Playgroud)
还需要什么?我是否需要将@Cache注释添加到JPA实体中?
如何判断缓存是否正常?我在运行Query之后尝试访问缓存统计信息,但Statistics.getSecondLevelCacheStatistics返回null,可能是因为我不知道要使用哪个'region'名称.
在我的环境中,我使用Java将结果集序列化为XML.它基本上是这样的:
//foreach column of each row
xmlHandler.startElement(uri, lname, "column", attributes);
String chars = rs.getString(i);
xmlHandler.characters(chars.toCharArray(), 0, chars.length());
xmlHandler.endElement(uri, lname, "column");
Run Code Online (Sandbox Code Playgroud)
在Firefox中,XML看起来像这样:
<row num="69004">
<column num="1">10069</column>
<column num="2">sd</column>
<column num="3">FCVolume </column>
</row>
Run Code Online (Sandbox Code Playgroud)
但是当我解析XML时,我得到了a
org.xml.sax.SAXParseException:字符引用" "是无效的XML字符.
我现在的问题是:我必须替换哪些字符,或者如何编码我的字符,它们将是有效的XML?
我是一个单独的开发人员,想要为我的项目获得一些结构.我的硬件设置是运行Windows XP的笔记本电脑和运行Ubuntu的桌面,它充当存储服务器.
我目前使用Mercurial作为我的源代码控制系统,将我的工作副本存储在我的笔记本电脑上,并每隔几天将存储库克隆到Ubuntu机器作为备份.
您会为单独的开发人员推荐哪些其他工具来执行错误跟踪,项目规划等操作?我正在寻找一些简单的东西,要么必须在Windows上运行,要么在Apache上作为Web应用程序运行.
如何打开"跨域安全性",以便页面上的JavaScript可以自由地与SWF通信,即使这是在另一个域上托管的?
我确实知道默认情况下会阻止此函数通信,但是通过使用名为"crossdomain.xml"的文件和actionscript 3函数:system.Security.allowDomain("*").虽然我没有取得足够的成功,但我没有洞察力知道哪一个是开放的.
是否有其他隐藏的安全层,在这种情况下我需要考虑哪些?
我是否通过这种设置以某种方式为潜在的黑客开放我的代码?
(如果您想知道:是的,我必须在一个场景中进行此工作,其中html托管在一个域上,JavaScript从另一个域外部添加,而SWF由来自第三个域的JavaScript嵌入 - 不要问为什么,解释起来太复杂了 - 我也希望我能在一个域中托管整个事情.
是否可以捆绑Play!Web应用程序到可执行jar而不是战争?它可以只在某个端口的localhost上运行,就像使用"play run"命令一样吗?(无需安装游戏系统)
java ×6
caching ×2
actionscript ×1
bug-tracking ×1
cross-domain ×1
encoding ×1
flash ×1
hibernate ×1
icons ×1
iphone ×1
java-ee ×1
javascript ×1
jpa ×1
localization ×1
oop ×1
oracle ×1
scala ×1
scalaquery ×1
security ×1
session ×1
tabbar ×1
xml ×1