在我创建的jsf页面中,通过页面include添加了3个其他jsp页面,每个页面都有自己的支持bean,并通过scriptcollector预渲染方法从webservices预填充值。在保存时,如何在我的保存操作方法中获取提交的值?是否有可能从Faces Context获取每个bean的当前值? 我正在使用JSF 1.1。
答案 0 :(得分:1)
您可以在其他托管bean中注入一个托管bean作为托管属性。在JSF 1.x中,这是使用<managed-property>
中的faces-config.xml
声明来完成的。
这是一个启动示例,说明如何在1个表单bean中注入3个Web服务bean。
<managed-bean>
<managed-bean-name>webServiceBean1</managed-bean-name>
<managed-bean-class>com.example.WebServiceBean1</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>webServiceBean2</managed-bean-name>
<managed-bean-class>com.example.WebServiceBean2</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>webServiceBean3</managed-bean-name>
<managed-bean-class>com.example.WebServiceBean3</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>formBean</managed-bean-name>
<managed-bean-class>com.example.FormBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>webServiceBean1</property-name>
<value>#{webServiceBean1}</value>
</managed-property>
<managed-property>
<property-name>webServiceBean2</property-name>
<value>#{webServiceBean2}</value>
</managed-property>
<managed-property>
<property-name>webServiceBean3</property-name>
<value>#{webServiceBean3}</value>
</managed-property>
</managed-bean>
这样你就可以在表单提交方法中“通常的方式”访问它们。
public class FormBean {
private WebServiceBean1 webServiceBean1;
private WebServiceBean2 webServiceBean2;
private WebServiceBean3 webServiceBean3;
public String submit() {
// Here you can just access the submitted data through the injected beans.
}
// Add/generate setters. Getters are not necesary.
}
作为替代方案,您可以使用Application#createValueBinding()
以编程方式评估EL。
public String submit() {
FacesContext context = FacesContext.getCurrentInstance();
Application application = context.getApplication();
WebServiceBean1 webServiceBean1 = (WebServiceBean1) application.createValueBinding("#{webServiceBean1}").getValue(context);
WebServiceBean1 webServiceBean1 = (WebServiceBean2) application.createValueBinding("#{webServiceBean2}").getValue(context);
WebServiceBean1 webServiceBean1 = (WebServiceBean3) application.createValueBinding("#{webServiceBean3}").getValue(context);
// ...
}
请注意,上述方法在JSF 1.2及更新版本中已弃用,有利于统一EL API。另请参阅Get JSF managed bean by name in any Servlet related class。
答案 1 :(得分:0)
保存时,如何在保存操作方法中获取提交的值?
在应用请求值阶段,分配的提交值和可以使用以下方法input.getSubmittedValue()
访问,其中input
是基于输入的UIComponent。提交的值将在验证阶段进行验证和转换,如果成功发生,则将适当地设置UIComponent的value
。您应该能够从FacesContext找到您正在寻找的UIComponent。
是否可以从Faces Context获取每个bean的当前值?
我真的不确定你的目标是什么,但如果你想要的只是其他托管bean,那么你可以从外部文本中提供的HttpSession
中获取它们的值。
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("nameOfManagedBean");