【问题标题】:How to use get request and parameters together with JSF and ajax request? [duplicate]如何将get请求和参数与JSF和ajax请求一起使用? [复制]
【发布时间】: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


【解决方案1】:

解决方案是在页面的每个请求中添加请求参数。这可以通过&lt;f:param&gt; 标签来完成。

因此,要使上述代码正常工作,您只需在命令按钮中包含初始请求参数即可:

<p:commandButton value="Update" action="#{requestController.updateEntity}" update="myForm" >
    <f:param name="id" value="#{requestController.id}" />
</p:commandButton>

【讨论】:

  • @Xtreme:触发右突出显示也可以通过从问题中删除 [java] 标记来完成 :)
  • @BalusC 很高兴知道 ;-P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-17
  • 1970-01-01
  • 2014-07-25
  • 1970-01-01
相关资源
最近更新 更多