我正在开发一个Grails/Backbone/Handlebars应用程序,它是一个更大的遗留Java系统的前端,其中(出于历史和可定制性的原因)国际化消息深藏在隐藏在几个SOAP服务背后的数据库中隐藏在各种内部Java库之后.从Grails图层获取这些消息很简单,工作正常.
但我想知道的是如何将(例如)国际化标签放入我的Handlebars模板中.
现在,我正在使用GSP片段生成模板,包括一个获取我感兴趣的消息的自定义标记,例如:
<li><myTags:message msgKey="title"/> {{title}}</li>
Run Code Online (Sandbox Code Playgroud)
但是,出于性能和代码布局的原因,我希望摆脱GSP模板并将它们变成直接的HTML.我看了一下客户端国际化选项,比如i18n.js,但它们似乎依赖于我没有得到的消息文件的存在.(我可能会产生它,但它会是巨大且昂贵的.)
到目前为止,我能想到的最好的事情就是将标签楔入Backbone模型,所以我最终会得到像
<li>{{titleLabel}} {{title}}</li>
Run Code Online (Sandbox Code Playgroud)
然而,这真的远离了在一个漂亮干净的RESTful JSON API之上构建Backbone模型的理想 - RESTful服务返回的JSON混乱了表示数据(即本地化标签),或者我必须做额外的工作将标签注入Backbone模型 - 并且使用演示数据混乱Backbone模型似乎也是错误的.
我认为,就干净数据和干净的API而言,我想要做的是编写另一个RESTful服务,它接受消息键列表和类似消息,并返回包含所有本地化消息的JSON数据结构.但问题仍然存在:
将以下java String []转换为Scala列表的方法是什么?
val trimmedList : List[String] = str.split("\\n")).map (_.trim) // Missing some code here, does not compile
Run Code Online (Sandbox Code Playgroud) 由于Ruby 2.0左右,可以使用常量私有private_constant,如果常量直接在声明模块之外使用,则会导致错误.
然而,constants和const_defined?仍返回私人常数,并const_get允许对它们的访问.有没有办法以编程方式识别私有常量并在运行时过滤掉它们?
(注意:Module.private_constant有什么作用?有没有办法只列出私有常量?它的答案并没有专门解决这种情况,而是相反(如何只列出私有常量).)
更新:看起来好像在Ruby 1.9和2.0中,constants确实只包含公共常量.从2.1开始,no-arg constants仍然只包含公共常量,但设置inherit为falsewith constants(false)(即,仅列出在此模块中定义的常量,而不是在其祖先模块中)具有暴露私有常量的副作用.
我正在尝试编写一些以编程方式创建UIButton的代码的单元测试,但是当我从测试中调用此代码时,我得到了一个NullReferenceException.单步执行调试器,看起来像UIButton.FromType()返回null.
这是我正在测试的方法:
public UIButton makeButton (String title, Action<IWelcomeController> action)
{
UIButton button = UIButton.FromType (UIButtonType.RoundedRect);
// button is null here
button.SetTitle(title, UIControlState.Normal);
button.TouchUpInside += (sender, e) => {
action(controller);
};
return button;
}
Run Code Online (Sandbox Code Playgroud)
这是测试方法:
[Test()]
public void TestMakeButtonTitle ()
{
String title = "Elvis";
UIButton button = GetFactory().makeButton(title, delegate(IWelcomeController w) {});
Assert.AreEqual(title, button.Title(UIControlState.Normal));
}
Run Code Online (Sandbox Code Playgroud)
我猜我需要做一些神奇的环境才能让MonoTouch.UIKit在真正的应用程序之外工作.任何提示?(如果不可能,建议采用其他方法?)
假设您有以下字符串:
cat dog fish dog fish cat
Run Code Online (Sandbox Code Playgroud)
要替换所有cats带dogs,都dogs具有fish,和所有fish带cats.直观地说,预期结果:
dog fish cat fish cat dog
Run Code Online (Sandbox Code Playgroud)
如果您尝试使用明显的解决方案,循环使用replaceAll(),您会得到:
cat dog fish dog fish catdog dog fish dog fish dogfish fish fish fish fish fishcat cat cat cat cat cat显然,这不是预期的结果.那么最简单的方法是什么?我可以Pattern和Matcher(以及很多Pattern.quote()和Matcher.quoteReplacement())一起拼凑一些东西,但我拒绝相信我是第一个遇到这个问题的人,并且没有库函数来解决它.
(FWIW,实际案例有点复杂,不涉及直接交换.)
我正在尝试调整一些旧的构建脚本来运行Tomcat 6的RPM安装,我遇到了以下问题:
java.lang.IllegalArgumentException: Document base /var/lib/tomcat6/webapps/host-manager does not exist or is not a readable directory
at org.apache.naming.resources.FileDirContext.setDocBase(FileDirContext.java:142)
at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4086)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4255)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:637)
at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:563)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:498)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:593)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
Run Code Online (Sandbox Code Playgroud)
这不足为奇,因为Tomcat不在/var/lib/tomcat6,它在/usr/share/tomcat6.当我查找它可能来自哪里时,我发现的所有内容都在以下文件中host-manager.xml:
<Context docBase="${catalina.home}/webapps/host-manager"
privileged="true" antiResourceLocking="false" antiJARLocking="false">
</Context>
Run Code Online (Sandbox Code Playgroud)
现在,我已经$CATALINA_HOME设置了 …
我们有一个用Tapestry 4.1编写的大型,笨重但相当稳定的Web应用程序,我们正在寻求逐步迁移.为此,我们正在考虑在Grails中开发一些新功能.我们的客户应该永远不会知道其中的差别,如果可能的话,没有人在内部,例如在安装服务,应该要照顾要么-理想情况下,Grails的应用程序将在同战争为现有Tapestry代码,只是GrailsDispatcherServlet配置了更具体的路径.这也是有变化的怪物生成过程为现有应用程序的最小关键-重做在甘特和常青藤构建系统(目前蚂蚁,过渡到Maven的)是不是一种选择.如果我们能够在开发期间使用爆炸的WAR进行实时重新加载,那将是很好的.
问题,然后:
请注意我们不会使用GORM; 我们所有的数据都来自Web服务,我们已经拥有了Java域和消息传递层.
我正在org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':compileScala'尝试使用Gradle构建我的Scala项目,如果我运行Gradle,--stacktrace看起来就像罪魁祸首一样java.lang.OutOfMemoryError: PermGen space.
我尝试分配编译任务并添加MaxPermSize到分叉的JVM参数,但所做的只是将OOME移到后面InvocationTargetException.
这是我build.gradle的compileScala任务块:
compileScala {
options.fork = true
options.forkOptions.jvmArgs = ['-XX:MaxPermSize=512m']
scalaCompileOptions.additionalParameters = [
"-feature",
"-language:reflectiveCalls", // used for config structural typing
"-language:postfixOps"
]
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以解决此通过使用全球增加PermGen的空间$JAVA_OPTIONS,但我更喜欢我可以这样就没有人需要本地定制任何建设项目与源检查的解决方案.
FWIW,我在Mac OS 10.9.3上的Java 1.6.0_65下使用Gradle 1.11和Scala 2.10.3.
当我搜索时validate latitude longitude [javascript],我会得到无差别地匹配数字或匹配错误范围的答案,或者只是太复杂而无法调试.
公平地说,其中一些OP确实要求正则表达式,并且Javascript不是我的第一语言,但它似乎更简单,更不容易出错,只是为了数学运算:
function isLatitude(maybeLat) {
var latF = parseFloat(maybeLat)
if (isNaN(latF)) return false
return (latF >= -90 && latF <= 90)
}
function isLongitude(maybeLon) {
var lonF = parseFloat(maybeLon)
if (isNaN(lonF)) return false
return lonF >= -180 && lonF <= 180
}
Run Code Online (Sandbox Code Playgroud)
是的,它不那么简洁,但它的可读性要高得多
^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$
Run Code Online (Sandbox Code Playgroud)
使用正则表达式有一些优势吗?性能?浏览器兼容?只允许正则表达式验证的库工具?SO用户炫耀他们疯狂的正则表达式sk1llz?
grails ×2
scala ×2
tomcat ×2
backbone.js ×1
collections ×1
gradle ×1
java ×1
javascript ×1
nunit ×1
permgen ×1
replace ×1
ruby ×1
string ×1
swift ×1
tapestry ×1
tomcat6 ×1
uibutton ×1
uikit ×1
xamarin.ios ×1