如何将 get 请求和参数与 JSF 和 ajax 请求一起使用



我想知道将get请求,参数和ajax请求与JSF一起使用的常用方法是什么?

我想要实现的是将 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 请求的常用方法是什么?

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

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

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

最新更新