Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 如何将get请求和参数与JSF和ajax请求一起使用?_Jsf 2_Primefaces_Http Request Parameters - Fatal编程技术网

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

Jsf 2 如何将get请求和参数与JSF和ajax请求一起使用?,jsf-2,primefaces,http-request-parameters,Jsf 2,Primefaces,Http Request Parameters,我想知道与JSF一起使用get请求、参数和ajax请求的常见方法是什么 我想要实现的是向JSF页面传递一个id参数,从数据库中检索具有给定参数的实体,并在JSF页面上显示该实体。然后,我想对实体进行一些更改,并将其填充回数据库(通过ajax) 我一直停留在这个步骤上,我想将更改填充回数据库。以下是我到目前为止的情况: 我有一个非常简单的JSF页面和一个控制器(ManagedBean) JSF页面 <h:body> <h:form id="myForm">

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

我想要实现的是向JSF页面传递一个id参数,从数据库中检索具有给定参数的实体,并在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>
我可以用id参数打开JSF页面,实体将正确显示。但是,当我单击update按钮时,控制器将被新实例化,id参数将消失


在JSF中,处理请求参数和ajax请求的常用方法是什么?

解决方案是在页面中的每个请求处添加请求参数。这可以通过
标记完成

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



在JSF 2中,如果使用ManagedBean和ViewScope注释,我不知道为什么要使用组件和范围,我想它们是spring注释。。但事实并非如此jsf@Damian在使用spring管理bean时,可以使用
@Component
@Scope
。这是完全有效的,它确实是JSF。我不使用Spring,所以我不知道它在这个特定构造中扮演什么角色,但是在JSF EL中,您可以通过
{param.id}
而不是
{request.getParameter('id')}
引用EL中的请求参数。至少,当使用JSF
@ManagedBean
/
@ManagedProperty
而不是那些Spring注释时,它就是这样工作的。Spring中没有范围(“视图”)?@Damian OOTB Spring中没有视图范围,但您可以轻松构建自己的,其行为类似于视图范围。但是,这并不能解决问题,因为在示例代码中注入的请求参数在视图范围内不起作用。@Xtreme:触发右突出显示也可以通过从问题中删除[java]标记来完成:)@BalusC这很好-P
@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;
}
}