简体   繁体   中英

JSF access html element value in bean class

I have a JSF application in which I have a combo box.

<h:selectOneMenu id="collectorType"
                           value="#{activityDataSource.object.type}"
                           rendered="#{empty activityDataSource.object.id}"
                           disabled="#{!sp:hasRight(facesContext, 'ManageApplication')}"
                           readonly="#{!sp:hasRight(facesContext, 'ManageApplication')}"
                           onchange="$('editForm:selectTypeButton').click();">
             <f:ajax event="change" 
                    execute="@this" 
                    render="dsTransformationRule dsCorrelationRule"
                    listener="#{activityDataSource.handleCollectorTypeChange}" />
            <f:selectItem itemValue="" itemLabel="#{msgs.select_collector_type}"/>
            <f:selectItems value="#{activityDataSource.collectorTypes}"/>
          </h:selectOneMenu>

And I am getting selected value of that combo box in bean class like:

public void setSelectedTransformationRule(String transformationRule)
        throws GeneralException {
    String collectorType = (String) getRequestParam().get("editForm:collectorType");
}

And I am successful in doing so. I am calling this method through ajax onchage event of combobox.

But if I try to get same combo box value in a different method i get null value.

public void handleCollectorTypeChange() throws GeneralException {
    String collectorType = (String) getRequestParam().get("editForm:collectorType");
}

Any help !

Because Process Events happens before Update Model Values you can retrieve the value from the component, from the UIViewRoot like this:

HtmlSelectOneMenu collectorTypeSelectMenu = (HtmlSelectOneMenu) FacesContext.getCurrentInstance().getViewRoot().findComponent("editForm:collectorType");
String collectorType = (String) collectorTypeSelectMenu.getValue();

try put the attributes process and partialSubmit in your ajax call with the values you need process like this:

<f:ajax event="change" 
   execute="@this" 
   render="dsTransformationRule dsCorrelationRule"
   process="@this, collectorType"
   partialSubmit="true"
   listener="#{activityDataSource.handleCollectorTypeChange}" />

In the process atrribute you can put all ids you need to process with the updated values (like you see in the screen.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM