【发布时间】:2012-08-14 11:29:31
【问题描述】:
不知道 JSF 一起使用 get 请求、参数和 ajax 请求的常用方法是什么?
我想要实现的是将id参数传递给JSF页面,从数据库中检索具有给定参数的实体并将实体显示在JSF页面上。然后,我想对实体进行一些更改并将其填充回数据库(通过 ajax)。
我坚持了一步,我想将更改填充回数据库。这是我目前所拥有的:
我有一个非常简单的 JSF 页面和一个控制器(ManagedBean)。
JSF 页面
<h:body>
<h:form id="myForm">
<p:messages />
<h:panelGrid columns="3">
<h:outputLabel value="#{requestController.id}" />
<p:commandButton value="Update" action="#{requestController.updateEntity}" update="myForm" />
</h:panelGrid>
</h:form>
</h:body>
控制器
@Component("requestController")
@Scope("request")
public class RequestController {
@Value("#{request.getParameter('id')}")
private String id;
private String entity;
@PostConstruct
public void init() {
if(id == null || id.equals("")) {
entity = "Entity not found";
}
else if("1".equals(id)) {
entity = "FirstEntity";
}
else {
entity = "SecondEntity";
}
}
public String getEntity() {
return entity;
}
public void updateEntity() {
entity += "_updated";
}
public String getId() {
return id;
}
}
我可以打开带有 id 参数的 JSF 页面,实体将正确显示。但是,当我单击更新按钮时,控制器将被新实例化,并且 id 参数消失了。
JSF中处理请求参数和ajax请求的常用方法是什么?
【问题讨论】:
-
在 JSF 2 中你使用 ManagedBean 和 ViewScoped 注释,我不知道你为什么使用 Component 和 Scope,我猜它们是 spring 注释.. 但那不是 jsf
-
@Damian 你可以使用
@Component和@Scope当你使用spring 来管理你的bean 时。这是完全正确的,它确实是 JSF。 -
我不使用 Spring,所以我不知道它在这个特定结构中扮演什么角色,但在 JSF EL 中,您将通过
#{param.id}引用 EL 中的请求参数,而不是 @987654326 @。至少,当使用 JSF@ManagedBean/@ManagedProperty而不是那些 Spring 注释时,它是这样工作的。 -
春天没有Scope("view")?
-
@Damian OOTB spring 中没有视图范围,但您可以轻松构建自己的视图范围。但是,这并不能解决问题,因为在示例代码中注入的请求参数在视图范围内不起作用。
标签: jsf-2 primefaces http-request-parameters