/ / Como validar p: pickList para exigir pelo menos uma seleção - validação, jsf, jsf-2, primefaces

Como validar p: pickList para exigir pelo menos uma seleção - validação, jsf, jsf-2, primefaces

Eu usei a lista de seleção de colunas para personalizar colunasda tabela na página e eu quero mostrar mensagem de diálogo (pelo menos uma coluna deve ser habilitada) se o usuário desabilita todas as colunas da lista de opções. Isso significa que o usuário deve manter pelo menos uma coluna na caixa de ativação.

<p:dialog id="pickListDialog" header="Customize View"
widgetVar="dlg">
<h:panelGrid>
<p:pickList id="columnPickList"
value="#{Class_Name.columns}" var="col"
itemLabel="#{Class_Name.columnPickList.columnsDisplayMap.get(col)}"
itemValue="#{col}">
<f:facet name="sourceCaption">Disabled</f:facet>
<f:facet name="targetCaption">Enabled</f:facet>
</p:pickList>

<p:commandButton value="Submit"
actionListener="#{Class_Name.columnPickList.saveColumns}" onclick="return disableClick();"
ajax="false" />
</h:panelGrid>
</p:dialog>

Método Javascript -

function disableClick(){
if (document.getElementById("form:columnPickList_target").value == ""){
alert("Please Select Atleast One Field");
return false;
}
}

Aqui eu usei JavaScript para isso. Mas eu quero fazer isso pelo JSF. Alguém por favor pode me dizer?

Respostas:

2 para resposta № 1

Caso 1: usando o atributo obrigatório

<p:pickList id="columnPickList" required="true" requiredMessage="Atleast one column should be  enabled"
value="#{Class_Name.columns}" var="col"
itemLabel="#{Class_Name.columnPickList.columnsDisplayMap.get(col)}"
itemValue="#{col}">
<f:facet name="sourceCaption">Disabled</f:facet>
<f:facet name="targetCaption">Enabled</f:facet>
</p:pickList>

Caso 2: Abrindo o diálogo do bean de apoio

    public void saveColumns()
{
validateColumns();

//doSomthing
}

public void validateColumns() {
//check if picklist target is empty
if(columns.getTarget().size()==0)
{
//open dialog
message="Atleast one column should be  enabled";
RequestContext.getCurrentInstance().execute("validationDialog.show()");
}
}

private String message; //getter and setter

diálogo:

<p:dialog id="valid"  widgetVar="validationDialog">
<p:outputLabel value="#{yourbean.message}" />
</dialog>