2012-08-14 65 views
1

我想知道使用get请求,参数和ajax请求与JSF一起使用的常见方式是什么?如何使用get请求和参数以及JSF和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请求的常见方式是什么?

+0

,我不知道你为什么正在使用组件和范围,我猜他们是春天的注释..但这不是jsf – Damian 2012-08-14 11:50:49

+0

@Damian当你使用spring来管理你的bean时,你可以使用'@ Component'和'@ Scope'。这完全有效,它的确是JSF。 – flash 2012-08-14 11:53:49

+0

我不这样做Spring,所以我不知道它在这个特定的构造中扮演了哪个角色,但是在JSF EL中,您将通过'#{param.id}'引用EL中的请求参数,而不是'#{request .getParameter( '编号')}'。至少,这是使用JSF'@ ManagedBean' /'@ ManagedProperty'而不是那些Spring注释时的工作原理。 – BalusC 2012-08-14 15:05:12

回答

2

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

所以,让上面的代码工作,你只需要包括初始请求参数到命令按钮:

<p:commandButton value="Update" action="#{requestController.updateEntity}" update="myForm" > 
    <f:param name="id" value="#{requestController.id}" /> 
</p:commandButton> 
在JSF 2使用ManagedBean和ViewScoped注释
+0

@Xtreme:触发右侧突出显示也可以通过从问题中删除[java]标签:) – BalusC 2015-04-17 13:10:02

+0

@BalusC这很好理解;-P – 2015-04-17 13:11:52