我有一个使用Spring MVC的Web应用程序.我希望我的界面只包含一个页面,它通过AJAX动态检索所有数据.我的问题是国际化.当我用jsps渲染内容时,我可以使用JSTL标记来解析我的键(使用Spring MVC非常容易):
<fmt:message key="name"/>: ${name}
<fmt:message key="title"/>: ${title}
<fmt:message key="group"/>: ${group}
Run Code Online (Sandbox Code Playgroud)
正确配置后,它将在芬兰语语言环境中呈现为
Nimi: yay
Otsikko: hoopla
Ryhmä: doo
Run Code Online (Sandbox Code Playgroud)
现在,当我使用json时,我只从服务器进来:
{
name: "yay",
title: "hoopla",
group: "doo"
}
Run Code Online (Sandbox Code Playgroud)
没有键名!但我必须以某种方式提供它们.我考虑将键名更改为其本地化表单或将本地化键名添加到json输出(例如name_localized ="Nimi"),但这两个选项都是不好的做法.我正在使用jackson json自动将我的域对象解析为json,我喜欢它提供的封装.
我想出的唯一可行的解决方案是:动态创建一个javascript文件,将本地化的键名作为变量.
<script type="text/javascript">
var name="Nimi";
var title="Otsikko";
var group="Ryhmä";
</script>
Run Code Online (Sandbox Code Playgroud)
一旦我加载了这个,我现在拥有我的javascript中的所有信息来处理json!但是有一个问题:我的字段名称列表是动态的.所以jsp中的实际静态渲染看起来像这样:
<c:forEach var="field" values="${fields}">
<fmt:message key="${field.key}"/>: ${field.value}
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
我需要找到我的messages.properties中指定的所有消息.Spring MessageSource接口仅支持按键检索消息.如何获取JSP中的键名列表,这些键名称会呈现本地化的javascript变量?
我正在尝试创建一个从ui.slider扩展的jQuery小部件.我想要一个在'slide'事件上执行的自定义方法.我尝试覆盖父选项,就像正常使用滑块小部件一样,但我遇到了变量范围的问题:
$.widget( "ui.myslider", $.ui.slider, {
_create: function() {
this.foo = "bar";
// Outputs "bar"
this._mySlide();
// Outputs "undefined" when triggered
this.options.slide = this._mySlide;
$.ui.slider.prototype._create.apply(this, arguments);
},
_mySlide: function() {
alert(this.foo);
}
}
Run Code Online (Sandbox Code Playgroud)
如何在幻灯片事件上触发我的功能并访问我的变量?
编辑: 链接到ui.slider源:https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.slider.js
编辑:解决方案
$.widget( "ui.myslider", $.ui.slider, {
_create: function() {
$.ui.slider.prototype._create.apply(this, arguments);
this.foo = "bar";
},
_slide: function() {
$.ui.slider.prototype._slide.apply(this, arguments);
alert(this.foo);
}
}
Run Code Online (Sandbox Code Playgroud) 我想测试这个必须调用静态类的代码块.
class SomeModule {
public function processFoo()
{
$foo = FooFactory::getFoo();
// ... Do something to $foo
return $foo;
}
}
Run Code Online (Sandbox Code Playgroud)
我无法修改静态类.但是我可以更改模块内的代码.如何重构此代码以进行单元测试?
首先,我为我对NoSQL架构(以及一般数据库)的潜在浅薄理解深表歉意,所以请耐心等待.
我正在考虑使用mongoDB来存储与UUID相关的资源.资源可以是诸如大图像文件(几十兆字节)之类的东西,因此将它们存储为文件并仅在我的数据库中存储链接以及相关元数据是有意义的.还有增加灵活性来解耦资源文件的实际位置,因此如果需要,我可以使用不同的第三方来存储文件.
现在,一个描述资源的文档大约是1kB.起初我除了几十万个数据库大小相当于几百兆字节的资源文档,很容易适应服务器内存.但是将来我可能需要将其扩展到数十万个文档的数量级.这将是几十千兆字节,我不能再挤进服务器内存了.
只有索引仍然适合内存大约一千兆字节或两千兆字节.但是,如果我理解正确,每次我在UUID上查找时都必须从磁盘读取.在这种情况下,传统的关系数据库是否可以从mongoDB获得显着的速度优势?
奖金问题:有没有一种既定的方式来做我想要实现的目标?:)
我有一个这样的课:
class MyClass {
Map<String, String[]> arrays;
public void setArrays(Map<String, String[]> arrays)
{
this.arrays = arrays;
}
public String[] getArray(String key)
{
return arrays.get(key);
}
}
Run Code Online (Sandbox Code Playgroud)
这些值是从属性文件中提供的,如下所示:
# my.properties
arrays.arrayOne=a,b,c
arrays.arrayTwo=d,e,f
Run Code Online (Sandbox Code Playgroud)
使用弹簧我可以这样连接属性:
<property name="arrays">
<map>
<entry key="arrayOne" value="${arrays.arrayOne}"/>
<entry key="arrayTwo" value="${arrays.arrayTwo}"/>
</map>
</property>
Run Code Online (Sandbox Code Playgroud)
现在,这可以工作,但每次我在属性文件中添加新条目时,我都必须手动编辑连线.有一个更好的方法吗?
java ×2
javascript ×2
spring ×2
ajax ×1
arrays ×1
database ×1
jquery ×1
jquery-ui ×1
mongodb ×1
nosql ×1
php ×1
phpunit ×1
properties ×1
refactoring ×1
spring-mvc ×1
static ×1
unit-testing ×1