2012-08-14 97 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