我可以使用我的Servlet访问Spring bean
WebApplicationContext springContext =
WebApplicationContextUtils.getWebApplicationContext(getServletContext());
Run Code Online (Sandbox Code Playgroud)
在Servlet的init方法中.
我想知道是否有相当于WebApplicationContextservlet过滤器?另外,是否可以在标记类中访问Spring bean?
我有结果
Query query = session.createQuery("From Pool as p left join fetch p.poolQuestion as s");
Run Code Online (Sandbox Code Playgroud)
查询,我想在JSP上显示它.
我有循环:
<c:forEach items="${pools}" var="pool">
<p>${pool.name}</p>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
我想显示poolQuestion表(连接表)的结果.我想要显示的值是"回答".
我该怎么做?
<c:forEach items="${pools}" var="pool">
<p>${pool.answer}</p>
<p>${pool.name}</p>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
上面的代码不起作用.
错误是:
org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/views/home.jsp at line 21
18: <c:forEach items="${pools}" var="pool">
19:
20: <p>${pool.name}</p>
21: <c:out value="${pool.poolQuestion.answer}"/>
22:
23: </c:forEach>
24:
SEVERE: Servlet.service() for servlet appServlet threw exception
javax.el.PropertyNotFoundException: Property 'answer' not found on type com.pool.app.domain.Pool
at javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:214)
at javax.el.BeanELResolver$BeanProperties.access$400(BeanELResolver.java:191)
at javax.el.BeanELResolver.property(BeanELResolver.java:300)
at javax.el.BeanELResolver.getValue(BeanELResolver.java:81)
at …Run Code Online (Sandbox Code Playgroud) 我相信我理解Java Beans是什么:包含no-arg构造函数的Java类是可序列化的,并使用getter和setter公开它们的字段.
Java Bean是否必须公开其所有字段才能获得bean的资格?如果不是,它甚至不得暴露任何?
May Java Beans是否包含带参数的构造函数以及无参数构造函数?
Java Bean的目的是什么,除了符合某种编码风格?似乎有很多关于'豆豆'或'豆豆'的讨论,但我不知道为什么它们是有利的,特别是.
我完全可以制作no-arg构造函数.可能有很多原因,如果无参数构造函数帮助编译器进行一些优化,我也不会感到惊讶.我也可以理解让你的课程可序列化.即使该类从未被序列化,也可能是,并且回溯可能会令人讨厌(或者在黑盒子库中不可能).
但最令人好奇的是要求所有字段都可以通过getter和setter访问.当我需要它时,我确实在我自己的工作中使用它们,但Java Beans需要它们(可能所有这些,取决于我对#1的回答)似乎很奇怪.如果它是反射的问题,那么反射是否也不容易得到字段?如果这不仅仅是设置值的问题,那么如果方法存在,反射是否不能在字段上使用getter/setter?
是否有任何标准方法来访问Java Bean Property
class A {
private String name;
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}
Run Code Online (Sandbox Code Playgroud)
所以我可以使用Reflection API访问这个java bean属性名,这样当我更改property的值时,当我设置并获取该属性的值时,会自动调用getName和setName的方法.
使用Spring时,只有在传递的值不为null时才可以设置属性吗?
例:
<bean name="myBean" class="some.Type">
<property name="abc" value="${some.param}"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
我正在寻找的行为是:
some.Type myBean = new some.Type();
if (${some.param} != null) myBean.setAbc(${some.param});
Run Code Online (Sandbox Code Playgroud)
我需要这个的原因是因为abc有一个默认值,我不想用a覆盖null.我正在创建的Bean不在我的源代码控制之下 - 所以我无法改变它的行为.(另外,abc为此目的可能是原始的,所以无论如何我都不能用null设置它.
编辑:
根据答案,我认为我的问题需要澄清.
我有bean我需要实例化并传递给我使用的第三方.这个bean拥有各类(的许多特性(目前12) ,,int 等),
每个属性都有一个默认值-我不知道它是什么,宁愿不需要知道,除非它成为一个问题.我正在寻找的是一个来自Spring的能力的通用解决方案 - 目前我唯一的解决方案是基于反射.booleanString
组态
<bean id="myBean" class="some.TypeWrapper">
<property name="properties">
<map>
<entry key="abc" value="${some.value}"/>
<entry key="xyz" value="${some.other.value}"/>
...
</map>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
码
public class TypeWrapper
{
private Type innerBean;
public TypeWrapper()
{
this.innerBean = new Type();
}
public void setProperties(Map<String,String> properties)
{
if (properties …Run Code Online (Sandbox Code Playgroud) 我试图了解Bean验证中的Groups.
所以,例如,如果我有一个bean,并且我只想要某些字段验证某些字段,我应该将它们分组?
@NotNull (groups=MyClassX.class)
@Min (groups=MyClassA.class) // 1
@Pattern(xxxxx, groups = MyClassA.class) // 2
private String field1;
@NotNull (groups=MyClassX.class)
@Min (groups=MyClassX.class)
@Pattern(xxxxx, groups=MyClassX.class))
private String field2;
@NotNull (groups=MyClassX.class)
@Min (groups=MyClassX.class)
@Pattern(xxxxx, groups=MyClassA.class) //3
private String field3;
Run Code Online (Sandbox Code Playgroud)
我从上面的例子理解是,如果我通过MyClassA对验证,则仅@Min及@Pattern于Field1和@Pattern为field3只验证?(标有数字1,2和3)
我理解正确吗?没有Groups属性,我没有留下任何字段.所以没有默认组.
我是一名Java开发人员,我每天都在和Beans合作.我很好奇"Bean"这个名字的历史.它只是来自咖啡豆,还是还有其他东西?
Netbeans很棒但是没有办法在其中包装文本(或者希望我还没有找到它).有没有办法做到这一点,如果没有,是否有任何类似的良好的Java IDE与此功能(希望也是免费的).
在JSF请求处理生命周期的哪个阶段,用@PostConstruct标记的支持bean方法调用?
我在bean的"destroy-method"中放了一个sysout语句.当我运行示例代码时,sysout没有得到输出.这是否意味着破坏方法没有被调用?
测试类:
package spring.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class InitTest {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("InitTestContext.xml");
InitTestBean bean = (InitTestBean)ctx.getBean("InitTestBean");
bean.display();
}
}
Run Code Online (Sandbox Code Playgroud)
豆
package spring.test;
public class InitTestBean {
private String prop1;
private String prop2;
public InitTestBean(String prop1, String prop2) {
System.out.println("Instantiating InitTestBean");
this.prop1 = prop1;
this.prop2 = prop2;
}
public void setProp1(String prop1) {
System.out.println("In setProp1");
this.prop1 = prop1;
}
public void setProp2(String prop2) {
System.out.println("In setProp2");
this.prop2 = prop2;
} …Run Code Online (Sandbox Code Playgroud)