primefaces radio-button submitchanges

primefaces - Obtenga p: selectOneRadio value para una función JS



radio-button submitchanges (1)

Tengo selectOneRadio de un PF para elegir un tipo de archivo para descargar. También tengo CommandButton para llamar a un servlet de descarga usando el atributo onclick. El problema es que cuando elijo el tipo de archivo y hago clic en el botón, el valor elegido por supuesto aún no se ha enviado. Estoy buscando alguna manera de obtener el valor elegido disponible cuando hago clic en un botón de descarga.

Aquí está mi código:

<p:selectOneRadio id="sorType" value="#{bean.type}" layout="custom"> <f:selectItem itemLabel="XML" itemValue="XML" /> <f:selectItem itemLabel="XLS" itemValue="XLS" /> <f:selectItem itemLabel="CSV" itemValue="CSV" /> </p:selectOneRadio> <p:commandButton type="button" ajax="false" onclick="return downloadFile(''#{bean.type}'');" />


Si desea verificar el valor seleccionado en el lado del cliente, necesitará definir el atributo widgetVar para su p:selectOneRadio , por ejemplo:

<p:selectOneRadio widgetVar="widgetSorType" id="sorType" value="#{bean.type}" layout="custom"> <f:selectItem itemLabel="XML" itemValue="XML" /> <f:selectItem itemLabel="XLS" itemValue="XLS" /> <f:selectItem itemLabel="CSV" itemValue="CSV" /> </p:selectOneRadio>

Esto permitirá que el elemento se encuentre fácilmente; luego puede usarlo más para verificar qué valor fue realmente seleccionado. Puedo ver dos opciones de cómo hacerlo:

function getSelectedTypeVer1() { return PF(''widgetSorType'').getJQ().find('':checked'').val() || ""; } function getSelectedTypeVer2() { var inputs = PF(''widgetSorType'').inputs; for (var i = 0; i < inputs.length; i++) { if (inputs[i].checked) { return inputs[i].value; } } return ""; }

Seleccione el enfoque que más le convenga: ambos devolverán el valor seleccionado o una cadena vacía en caso de que no se haya seleccionado nada. Así que todo lo que queda es llamarlo en el botón de clic, así que por ejemplo:

<p:commandButton type="button" ajax="false" onclick="return downloadFile(getSelectedTypeVer1());" />

Probado en PrimeFaces 5.2