有没有办法将Spring绑定到地图中的值?
例如,我有一个Map<String,String>
,我想弹出绑定其中的特定值.用户将在输入元素中键入内容,并且该输入元素的值将绑定到与地图中特定键关联的值.
我正在努力获得与JPA(提供者:Hibernate)一起使用的单向一对一关系.在我看来,这不应该是一个麻烦,但显然JPA/Hibernate不同意这一点;-)
问题是我必须映射一个我无法更改的遗留模式,并且此模式在两个实体之间使用共享主键,同时它是一个实体的外键.
我创建了一个简单的TestCase:
DB如下所示:
CREATE TABLE PARENT (PARENT_ID Number primary key, Message varchar2(50));
CREATE TABLE CHILD (CHILD_ID Number primary key, Message varchar2(50),
CONSTRAINT FK_PARENT_ID FOREIGN KEY (CHILD_ID )REFERENCES PARENT (PARENT_ID));
CREATE SEQUENCE SEQ_PK_PARENT START WITH 1 INCREMENT BY 1 ORDER;
Run Code Online (Sandbox Code Playgroud)
父母(=一对一的拥有方)看起来如下:
@Entity
@Table(name = "PARENT")
public class Parent implements java.io.Serializable {
private Long parentId;
private String message;
private Child child;
@Id
@Column(name = "PARENT_ID", unique = true, nullable = false, precision = 22, scale = 0)
@SequenceGenerator(name="pk_sequence", sequenceName="SEQ_PK_PARENT")
@GeneratedValue(generator="pk_sequence", strategy=GenerationType.SEQUENCE) …
Run Code Online (Sandbox Code Playgroud) 我有这段代码:
@RequestMapping(value = "/test.json", method = RequestMethod.GET)
@ResponseStatus(HttpStatus.OK)
public @ResponseBody Object[] generateFile(@RequestParam String tipo) {
Object[] variaveis = Variavel.getListVariavelByTipo(tipo);
return variaveis;
}
Run Code Online (Sandbox Code Playgroud)
据我所知,它应该接受test.json?tipo = H的请求并返回Variavel []的JSON表示,但是当我提出这样的请求时,我得到:
HTTP状态406 -
类型状态报告
信息
description此请求标识的资源只能根据请求"accept"标题生成具有不可接受特征的响应()
通过使用以下函数,我可以得到预期的json:
@RequestMapping(value = "/teste.json")
public void testeJson(Model model, @RequestParam String tipo) {
model.addAttribute("data", Variavel.getListVariavelByTipo("H"));
}
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
我正在验证传入属性,但验证程序甚至可以捕获未注释的其他页面 @Valid
@RequestMapping(value = "/showMatches.spr", method = RequestMethod.GET)
public ModelAndView showMatchPage(@ModelAttribute IdCommand idCommand)
//etc
Run Code Online (Sandbox Code Playgroud)
当我访问页面时,/showMatches.spr
我收到错误org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalStateException: Invalid target for Validator [cz.domain.controller.Controllers$1@4c25d793]: cz.domain.controller.IdCommand@486c1af3
,
验证器不接受它,但我不想让它验证!通过此验证器:
protected void initBinder(WebDataBinder binder) {
binder.setValidator(new Validator() {
// etc.
}
Run Code Online (Sandbox Code Playgroud) 我有一个我要验证的表单.它包含2个地址变量.始终要验证address1,必须根据某些条件验证address2
public class MyForm {
String name;
@Valid Address address1;
Address address2;
}
public class Address {
@NotEmpty
private String street;
}
Run Code Online (Sandbox Code Playgroud)
我的控制器自动验证并绑定我的表单obj
@RequestMapping(...)
public ModelAndView edit(
@ModelAttribute("form")
@Valid
MyForm form,
BindingResult bindingResult,
...)
if(someCondition) {
VALIDATE form.address2 USING JSR 303
Run Code Online (Sandbox Code Playgroud)
问题是,如果我使用LocalValidatorFactoryBean验证器,我无法重用Spring提供的BinidingResult对象.绑定不起作用,因为'result'的目标对象是'MyForm'而不是'Address'
validate(form.getAddress2(), bindingResult) //won't work
Run Code Online (Sandbox Code Playgroud)
我想知道什么是标准/清洁方法来进行条件验证.
我正在考虑以编程方式在我的控制器中创建一个新的BindingResult.
final BindingResult bindingResultAddress2 = new BeanPropertyBindingResult(address2, "form");
validate(form.getAddress2(), bindingResultAddress2);
Run Code Online (Sandbox Code Playgroud)
但是我从bindingResultAddress2获得的错误列表无法添加到一般的'bindingResult',因为字段名称不正确('street'而不是'address2.street'),绑定将不起作用.
一些肮脏的方法是扩展BeanPropertyBindingResult以接受一些字符串附加到字段名称..你有更好的方法吗?
当使用像Django,Kohana,Rails等MVC web框架构建webapps时,我最初将没有JS驱动组件的应用程序放在一起,然后将它们添加为UI的"改进".
这种方法导致非侵入式JS,但我没有一个很好的"标准"方式来组织JS工作.我在这些应用程序中编写的大多数JS都是10-30行JQuery片段,它们与UI的某些特定部分挂钩.
到目前为止,我经常最终将这些内容与他们管理的UI部分结合在一起.这让我觉得很脏,我想把JS代码保存为python/php/ruby代码,我希望它是可测试的,我希望它可以重用.
在这样的设置中组织JS代码的最佳方法是什么,我们没有构建一个完整的JS客户端应用程序,主要的仍然是服务器端?
考虑下面的代码狙击:
package sync;
public class LockQuestion {
private String mutable;
public synchronized void setMutable(String mutable) {
this.mutable = mutable;
}
public String getMutable() {
return mutable;
}
}
Run Code Online (Sandbox Code Playgroud)
在Time1线程Thread1将更新'mutable'变量.在setter中需要同步,以便将内存从本地缓存刷新到主内存.在时间Time2(Time2> Time1,没有线程争用)线程Thread2将读取mutable的值.
问题是 - 我需要在getter之前进行同步吗?看起来这不会导致任何问题 - 内存应该是最新的,Thread2的本地缓存内存应该由Thread1无效和更新,但我不确定.
java concurrency multithreading locking concurrent-programming
考虑以下类的结构:
BaseDAO
使用方法来填充PreparedStatement并从池中获取连接AccountDAO extends BaseDAO
Account
通过JDBC 处理表.这个班是单身AccountService
女巫调用AccountDAO的方法是这样的:
AccountDAO.getInstance().login(name, password).
AccountDAO
是一个Spring bean,带有@Transactional
插入一些数据的方法的注释.
这个可以吗?我认为单例DAO类可能会导致性能问题.可能最好在服务层类中使用一些弹簧注入?(我是Spring的新手,所以任何建议都会受到关注)
我试图在Spring中实例化一个泛型类,但我得到以下异常:
bean的初始化失败; 嵌套异常是org.springframework.aop.framework.AopConfigException:无法生成类[class football.dao.jpa.GenericJpaDAO]的CGLIB子类:此问题的常见原因包括使用final类或不可见类; 嵌套异常是java.lang.IllegalArgumentException:Superclass没有null构造函数但没有给出参数:
这是Spring容器的XML配置:
<bean id="clubDAO" class="football.dao.jpa.GenericJpaDAO">
<constructor-arg type="EntityManagerFactory" ref="entityManagerFactory"/>
<constructor-arg type="Class" value="football.model.entities.ClubEntity"/>
<constructor-arg type="String" value="ClubEntity"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
这是通用类:
public class GenericJpaDAO <T extends HavingID> {
private EntityManager em;
private Class entityClass;
private String entityName;
public GenericJpaDAO( Class entityClass, String entityName,
EntityManagerFactory emFactory ) {
this.entityClass = entityClass;
this.entityName = entityName;
em = emFactory.createEntityManager();
}
@Transactional
public void create( T entity ) {
em.persist( entity );
}
// more methods
}
Run Code Online (Sandbox Code Playgroud)
我不确定是什么导致了这一点.我很感激任何想法.
是否可以在J2EE应用程序(EAR)中配置两个单独的Web应用程序(WAR)来访问共享会话上下文?
更多信息:
我最终从EAR创建了一个共享类,它将所需信息存储在静态成员中.即使它看起来像是一个肮脏的黑客,这也成功了.
java ×7
spring ×6
spring-mvc ×4
validation ×2
ajax ×1
architecture ×1
binding ×1
concurrency ×1
dao ×1
generics ×1
hibernate ×1
httpsession ×1
java-ee ×1
javascript ×1
jpa ×1
locking ×1
one-to-one ×1
rest ×1
session ×1
war ×1