簡體   English   中英

JSF(和PrimeFaces)如何將參數傳遞給ManagedBean中的方法

[英]JSF (and PrimeFaces) How to pass parameter to a method in ManagedBean

我有一個我在inputtext中顯示的Employee對象。 例如,員工的名字顯示在inputtext中。 當這個名字的值改變時,它調用一個方法。 在此之前,我想調用一個方法,該方法將員工的ID保存在managedbean中,以便我知道哪個員工需要更改。 我怎么做到這一點,到目前為止我得到了這個:

<h:outputText value="First name:"/>
<p:inplace id="firstname" editor="true">
     <p:ajax event="save" onsuccess="#{employeeController.saveName()}"/>
     <p:inputText id="firstName" value="#{emp.firstName}"  
                  required="true" label="text"
                  valueChangeListener="#{employeeController.firstNameChanged}">
     <p:ajax event="valueChange" listener="#{employeeController.onValueChangedStart}"/>
     </p:inputText>
</p:inplace>

我想我應該使用onValueChangedStart或firstNameChanged方法傳遞ID。 我該怎么做呢? 或者有更好的方法嗎? emp有一個吸氣劑。 所以#{emp} .id得到它。

假設您確實在一個重復組件中,其中#{emp}已被其var屬性公開,您可以從值更改偵聽器中的EL范圍中獲取它,如下所示:

FacesContext context = FacesContext.getCurrentInstance();
Employee employee = context.getApplication().evaluateExpressionGet(context, "#{emp}", Employee.class);
Long id = employee.getId();
// ...

或者,如果將<h:dataTable>value包裝在DataModel<Employee> ,則可以按如下方式獲取當前行:

Employee employee = model.getRowData();
Long id = employee.getId();
// ...

具體問題無關 ,沒有必要為值更改提供兩個偵聽器方法。 請注意, valueChangeListener使您有機會通過事件和p:ajax listener獲取舊值和新值,而新值已在此時設置為模型值。 如果您需要舊值和新值,請刪除<p:ajax>listener屬性。 event="valueChange"是默認事件的方式,所以也可以刪除它。

使用primefaces ajax,您可以在java中檢索輸入的值:

public void onValueChanged(AjaxBehaviorEvent event)
{
    Employee employee = (Employee)((UIOutput)event.getSource()).getValue();
    //...
}

<h:selectOneMenu required="true"
    value="#{empl}" converter="#{bean.employeeConverter}">
    <f:selectItems value="#{bean.employees}" var="varEmployee" 
        itemLabel="#{varEmployee}" itemValue="#{varEmployee}"/>
    <p:ajax event="change" listener="#{bean.onValueChanged}"/>
</h:selectOneMenu>

因為您的值是String,所以不是強制轉換為員工,而是使用員工對象並使用轉換器或其toString()方法。

嘗試

<p:ajax event="save" onsuccess="#{employeeController.saveName(emp.id)}"/>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM