Board index JavaServer Faces General selectOneMenu - How should I dynamically render components?

selectOneMenu - How should I dynamically render components?

Components, Ajax Framework, Utilities and More.


Posts: 14
Hi smithh032772, thanks for reply.
You have a little diffrent situation. Your link was helpful tnx but another problems occurs.
By the way using "http://lmgtfy" is not a good option. your link doesn't work any more.

ad 1. It only generates empty column for <h:panelGrid columns="2">
ad 2 and 3. ok i will
ad 4. No its my dictionary table
ad 5. I know it's working but what about validation? I would like to skip this validation or redesign but don't know how. Problem is when the field is rendered and also required or has some validators, becouse if it's processed it is also validated. Also if the field is not processed the value is reset.

rejestracjaFirm.xhtml:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui">
    <body>

        <ui:composition template="./template/guestTemplate.xhtml">

            <ui:define name="head">
                <ui:remove>
                    <script type="text/javascript">
                        /* <![CDATA[ */
                        function changeBusinessType(){
                            if($("#srdSrdId").val()==3 || $("#srdSrdId").val()==4){
                                $("#rejestracjaFormPanelImie").show();
                            }else{
                                $("#rejestracjaFormPanelImie").hide();
                            }
                        }
                        function onLoadPage(){
                            changeBusinessType();
                        }
                        $(document).ready(function() {
                            onLoadPage();
                        });
                        /* ]]> */
                    </script>
                </ui:remove>
                <style type="text/css">
                    .rejestracjaFormFirstColumn{
                        width:150px;
                    }
                    .rejestracjaFormSecondColumn{
                        width:400px;
                    }
                </style>
            </ui:define>

            <ui:define name="top">
                top
            </ui:define>

            <ui:define name="left">
                left
            </ui:define>

            <ui:define name="content">
                <h:panelGroup id="messagePanel" layout="block">
                    <p:messages />
                </h:panelGroup>
                <h:form id="rejestracjaForm" prependId="false">
                    <f:event listener="#{rejestracjaController.validateRejestracja}" type="postValidate" />                   

                    <h:panelGrid columns="2" columnClasses="rejestracjaFormFirstColumn, rejestracjaFormSecondColumn">
                        <p:column />
                        <p:message id="srdSrdIdMessage" for="srdSrdId" />
                        <h:outputLabel value="#{msgs.CreateRejestracjaFormLabel_srdSrdId}" for="srdSrdId" />
                        <p:selectOneMenu id="srdSrdId"
                                         value="#{rejestracjaController.selected.srdSrdId}"
                                         title="#{msgs.CreateRejestracjaFormTitle_srdSrdId}"
                                         required="true"
                                         requiredMessage="#{msgs.msgs.CreateRejestracjaForm_srdSrdIdRequired}">
                            <f:selectItems value="#{sloRodzajDzialalnosciController.itemsAvailableSelectMany}" />                           
                            <p:ajax event="change"
                                    update="rejestracjaFormPanelImie"
                                    listener="#{rejestracjaController.changeTypeOfBusiness}"
                                    process="@this" />
                           
                            <ui:remove>
                                <p:ajax event="change"
                                        update="rejestracjaFormPanelImie"
                                        listener="#{rejestracjaController.changeTypeOfBusiness}"
                                        process="@this, imie" />
                            </ui:remove>

                        </p:selectOneMenu>
                       
                        <h:column />
                        <p:message id="kodPromocjiMessage" for="kodPromocji" />
                        <h:outputLabel value="#{msgs.CreateRejestracjaFormLabel_kodPromocji}"
                                        for="kodPromocji" />
                        <p:inputText id="kodPromocji" value="#{rejestracjaController.selected.kodPromocji}" title="#{msgs.CreateRejestracjaFormTitle_kodPromocji}">
                            <f:validateLength maximum="20" />
                        </p:inputText>

                        <p:column />
                        <h:selectOneMenu id="ssrSsrId" value="#{rejestracjaController.selected.ssrSsrId}" title="#{bundle.CreateRejestracjaFormTitle_ssrSsrId}" required="true" requiredMessage="#{bundle.CreateRejestracjaFormRequiredMessage_ssrSsrId}">
                            <f:selectItems value="#{sloStatusRejestracjiController.itemsAvailableSelectOne}"/>
                        </h:selectOneMenu>


                        <p:column />
                        <p:message id="nazwaMessage" for="nazwa" />
                        <h:outputLabel value="#{msgs.CreateRejestracjaFormLabel_nazwa}" for="nazwa" id="nazwas" />
                        <p:inputText id="nazwa" value="#{rejestracjaController.selected.nazwa}" title="#{msgs.CreateRejestracjaFormTitle_nazwa}">                           
                            <f:validateLength maximum="150" />
                        </p:inputText>

                        <p:column />
                        <p:message id="nazwiskoMessage" for="nazwisko" />
                        <h:outputLabel value="#{msgs.CreateRejestracjaFormLabel_nazwisko}" for="nazwisko" />
                        <p:inputText id="nazwisko" value="#{rejestracjaController.selected.nazwisko}" title="#{msgs.CreateRejestracjaFormTitle_nazwisko}">
                            <f:validateLength maximum="100" />
                        </p:inputText>
                    </h:panelGrid>

                    <h:panelGrid columns="2" id="rejestracjaFormPanelImie" columnClasses="rejestracjaFormFirstColumn, rejestracjaFormSecondColumn">
                        <p:column />
                        <p:message id="imieMessage" for="imie" />
                        <h:outputLabel value="#{msgs.CreateRejestracjaFormLabel_imie}" for="imie"
                                        rendered="#{rejestracjaController.selected.srdSrdId.srdId==3 || rejestracjaController.selected.srdSrdId.srdId==4}"/>
                        <p:inputText id="imie" value="#{rejestracjaController.selected.imie}"
                                        title="#{msgs.CreateRejestracjaFormTitle_imie}"
                                        required="#{rejestracjaController.selected.srdSrdId.srdId==3 || rejestracjaController.selected.srdSrdId.srdId==4}"
                                        requiredMessage="Wymagane wymagane"
                                        rendered="#{rejestracjaController.selected.srdSrdId.srdId==3 || rejestracjaController.selected.srdSrdId.srdId==4 || rejestracjaController.selected.srdSrdId.srdId==5}"
                                        disabled="#{!(rejestracjaController.selected.srdSrdId.srdId==3 || rejestracjaController.selected.srdSrdId.srdId==4 || rejestracjaController.selected.srdSrdId.srdId==5)}">
                            <f:validateLength maximum="50" />
                        </p:inputText>
                    </h:panelGrid>
                   

                    <h:panelGrid columns="2" id="rejestracjaFormPanel3" columnClasses="rejestracjaFormFirstColumn, rejestracjaFormSecondColumn">
                        <p:column />
                        <p:message id="ulicaMessage" for="ulica" />
                        <h:outputLabel value="#{msgs.CreateRejestracjaFormLabel_ulica}" for="ulica" />
                        <p:inputText id="ulica" value="#{rejestracjaController.selected.ulica}" title="#{msgs.CreateRejestracjaFormTitle_ulica}" required="true" requiredMessage="#{msgs.CreateRejestracjaFormRequiredMessage_ulica}">
                            <f:validateLength maximum="70" />
                        </p:inputText>

                        <p:column />
                        <p:message id="nrDomMessage" for="nrDom" />
                        <h:outputLabel value="#{msgs.CreateRejestracjaFormLabel_nrDom}" for="nrDom" />
                        <p:inputText id="nrDom" value="#{rejestracjaController.selected.nrDom}" title="#{msgs.CreateRejestracjaFormTitle_nrDom}" required="true" requiredMessage="#{msgs.CreateRejestracjaFormRequiredMessage_nrDom}">
                            <f:validateLength maximum="20" />
                        </p:inputText>

                        <p:column />
                        <p:message id="nrLokalMessage" for="nrLokal" />
                        <h:outputLabel value="#{msgs.CreateRejestracjaFormLabel_nrLokal}" for="nrLokal" />
                        <p:inputText id="nrLokal" value="#{rejestracjaController.selected.nrLokal}" title="#{msgs.CreateRejestracjaFormTitle_nrLokal}">
                            <f:validateLength maximum="10" />
                        </p:inputText>

                        <p:column />
                        <p:message id="miastoMessage" for="miasto" />
                        <h:outputLabel value="#{msgs.CreateRejestracjaFormLabel_miasto}" for="miasto" />
                        <p:inputText id="miasto" value="#{rejestracjaController.selected.miasto}" title="#{msgs.CreateRejestracjaFormTitle_miasto}" required="true" requiredMessage="#{msgs.CreateRejestracjaFormRequiredMessage_miasto}">
                            <f:validateLength maximum="85" />
                        </p:inputText>

                        <p:column />
                        <p:message id="kodPocztMessage" for="kodPoczt" />
                        <h:outputLabel value="#{msgs.CreateRejestracjaFormLabel_kodPoczt}" for="kodPoczt" />
                        <p:inputMask id="kodPoczt" value="#{rejestracjaController.selected.kodPoczt}"
                                     title="#{msgs.CreateRejestracjaFormTitle_kodPoczt}"
                                     required="true"
                                     requiredMessage="#{msgs.CreateRejestracjaFormRequiredMessage_kodPoczt}"
                                     mask="99-999">
                            <f:validateLength maximum="10" />
                            <f:validator validatorId="pl.alfaprojekt.view.jsf.validator.PostalCodeValidator" />
                        </p:inputMask>

                        <p:column />
                        <p:message id="telefonMessage" for="telefon" />
                        <h:outputLabel value="#{msgs.CreateRejestracjaFormLabel_telefon}" for="telefon" />
                        <p:inputText id="telefon" value="#{rejestracjaController.selected.telefon}" title="#{msgs.CreateRejestracjaFormTitle_telefon}">
                            <f:validateLength maximum="150" />
                        </p:inputText>

                        <p:column />
                        <p:message id="telefonKomMessage" for="telefonKom" />
                        <h:outputLabel value="#{msgs.CreateRejestracjaFormLabel_telefonKom}" for="telefonKom" />
                        <p:inputText id="telefonKom" value="#{rejestracjaController.selected.telefonKom}" title="#{msgs.CreateRejestracjaFormTitle_telefonKom}">
                            <f:validateLength maximum="20" />
                        </p:inputText>

                        <p:column />
                        <p:message id="faxMessage" for="fax" />
                        <h:outputLabel value="#{msgs.CreateRejestracjaFormLabel_fax}" for="fax" />
                        <p:inputText id="fax" value="#{rejestracjaController.selected.fax}" title="#{msgs.CreateRejestracjaFormTitle_fax}">
                            <f:validateLength maximum="50" />
                        </p:inputText>

                        <p:column />
                        <p:message id="emailMessage" for="email" />
                        <h:outputLabel value="#{msgs.CreateRejestracjaFormLabel_email}" for="email" />
                        <p:inputText id="email" value="#{rejestracjaController.selected.email}" title="#{msgs.CreateRejestracjaFormTitle_email}" required="true" requiredMessage="#{msgs.CreateRejestracjaFormRequiredMessage_email}">
                            <f:validateLength maximum="255" />
                            <f:validator validatorId="pl.alfaprojekt.view.jsf.validator.EmailValidator" />
                        </p:inputText>

                        <p:column />
                        <p:message id="nipMessage" for="nip" />
                        <h:outputLabel value="#{msgs.CreateRejestracjaFormLabel_nip}" for="nip" />
                        <p:inputText id="nip" value="#{rejestracjaController.selected.nip}" title="#{msgs.CreateRejestracjaFormTitle_nip}">
                            <f:validateLength maximum="15" />
                            <f:validator validatorId="pl.alfaprojekt.view.jsf.validator.NipValidator" />
                        </p:inputText>

                        <p:column />
                        <p:message id="regonMessage" for="regon" />
                        <h:outputLabel value="#{msgs.CreateRejestracjaFormLabel_regon}" for="regon" />
                        <p:inputText id="regon" value="#{rejestracjaController.selected.regon}" title="#{msgs.CreateRejestracjaFormTitle_regon}">
                            <f:validateLength maximum="20" />
                        </p:inputText>

                        <p:column />
                        <p:message id="krsNumerMessage" for="krsNumer" />
                        <h:outputLabel value="#{msgs.CreateRejestracjaFormLabel_krsNumer}" for="krsNumer" />
                        <p:inputText id="krsNumer" value="#{rejestracjaController.selected.krsNumer}" title="#{msgs.CreateRejestracjaFormTitle_krsNumer}">
                            <f:validateLength maximum="20" />
                        </p:inputText>


                        <p:column />
                        <p:message id="krsDataMessage" for="krsData" />
                        <h:outputLabel value="#{msgs.CreateRejestracjaFormLabel_krsData}" for="krsData" />
                        <p:calendar value="#{rejestracjaController.selected.krsData}"
                                    id="krsData"
                                    showButtonPanel="true"
                                    navigator="true"
                                    pattern="dd-MM-yyyy"
                                    showOn="button"
                                    readOnlyInputText="true">                           
                            <f:convertDateTime pattern="dd-MM-yyyy" />
                        </p:calendar>

                    </h:panelGrid>

                    <br />
                    <h:commandButton action="#{rejestracjaController.createBusiness}" value="#{msgs.CreateRejestracjaFormSaveLink}" />
                    <br />
                    <br />
                </h:form>
            </ui:define>

        </ui:composition>

    </body>
</html>



/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pl.alfaprojekt.view.jsf;

import java.io.Serializable;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.MessageFormat;
import java.util.Date;
import java.util.ResourceBundle;
import java.util.UUID;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.Resource;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
import javax.faces.component.UIPanel;
import javax.faces.context.FacesContext;
import javax.faces.event.AjaxBehaviorEvent;
import javax.faces.event.ComponentSystemEvent;
import javax.faces.event.ValueChangeEvent;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.servlet.http.HttpServletRequest;
import pl.alfaprojekt.model.beans.RejestracjaForm;
import pl.alfaprojekt.model.exception.RejestracjaFormNotFoundException;
import pl.alfaprojekt.model.exception.UzytkownikAlreadyConfirmedException;
import pl.alfaprojekt.model.exception.UzytkownikNotFoundException;
import pl.alfaprojekt.model.session.RejestracjaFormFacade;
import pl.alfaprojekt.utils.AuthenticationUtils;
import pl.alfaprojekt.view.jsf.util.JsfUtil;

/**
 *
 * @author marchi
 */
@ManagedBean(name = "rejestracjaController")
@ViewScoped
public class RejestracjaController implements Serializable {

    private Logger log = Logger.getLogger(RejestracjaController.class.getName());
    private RejestracjaForm current;
    @EJB
    private pl.alfaprojekt.model.session.RejestracjaFormFacade ejbFacade;
    @Resource(name = "mail/InternetShipping")
    private Session mailSession;
    private String token;
    private String email;
    private int typeOfBusiness;

    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public int getTypeOfBusiness() {
        return typeOfBusiness;
    }

    public void setTypeOfBusiness(int typeOfBusiness) {
        this.typeOfBusiness = typeOfBusiness;
    }

    public RejestracjaFormFacade getEjbFacade() {
        return ejbFacade;
    }

    public void setEjbFacade(RejestracjaFormFacade ejbFacade) {
        this.ejbFacade = ejbFacade;
    }

    public RejestracjaForm getSelected() {
        if (current == null) {
            current = new RejestracjaForm();
        }
        return current;
    }

    public String prepareCreate() {
        current = new RejestracjaForm();
        return "rejestracja";
    }

    public String create() {
        RejestracjaForm existingRejestracjaForm = null;
        try {
            existingRejestracjaForm = getEjbFacade().findRegistration(current.getEmail());
            JsfUtil.addErrorMessage(ResourceBundle.getBundle("pl.alfaprojekt.view.msgs").getString("ConfirmRejestracjaForm.alreadyExists"));
            return null;
        } catch (RejestracjaFormNotFoundException ex) {
            log.log(Level.SEVERE, null, ex);
        }

        try {
            String codeEmail = UUID.randomUUID().toString();
            current.setKodEmail(codeEmail);
            String password = AuthenticationUtils.generatePassword();
            getEjbFacade().createRegistration(current, AuthenticationUtils.getCodedPassword(password));
            sendNotification(current.getEmail(), codeEmail, password);
            JsfUtil.addSuccessMessage(ResourceBundle.getBundle("pl.alfaprojekt.view.msgs").getString("CreateRejestracjaFormSuccess"));
            return afterCreate();
        } catch (MessagingException ex) {
            JsfUtil.addErrorMessage(ex, ResourceBundle.getBundle("pl.alfaprojekt.view.msgs").getString("ConfirmRejestracjaForm.emailSendingError"));
            return null;
        } catch (Exception e) {
            JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("pl.alfaprojekt.view.msgs").getString("PersistanceErrorOccured"));
            return null;
        }
    }

    public String createBusiness() {
        RejestracjaForm existingRejestracjaForm = null;
        try {
            existingRejestracjaForm = getEjbFacade().findRegistration(current.getEmail());
            JsfUtil.addErrorMessage(ResourceBundle.getBundle("pl.alfaprojekt.view.msgs").getString("ConfirmRejestracjaForm.alreadyExists"));
            return null;
        } catch (RejestracjaFormNotFoundException ex) {
            // log.log(Level.SEVERE, null, ex);
        }
        Date now = new Date();
        current.setOprW(0L);
        current.setOprM(0L);
        current.setDataRej(now);
        current.setDataW(now);
        current.setDataM(now);
        current.setCzyAktywny((short) 1);

        getEjbFacade().create(current);
        JsfUtil.addSuccessMessage(ResourceBundle.getBundle("pl.alfaprojekt.view.msgs").getString("CreateRejestracjaFormSuccess"));

        return null;
    }

    public String afterCreate() {
        return "rejestracjaSukces";
    }

    public String confirm() {
        try {
            getEjbFacade().confirmRegistration(getToken(), getEmail());
            JsfUtil.addSuccessMessage(ResourceBundle.getBundle("pl.alfaprojekt.view.msgs").getString("ConfirmRejestracjaForm.confirmed"));
        } catch (RejestracjaFormNotFoundException ex) {
            JsfUtil.addErrorMessage(ResourceBundle.getBundle("pl.alfaprojekt.view.msgs").getString("ConfirmRejestracjaForm.invalidTokenForEmail"));
        } catch (UzytkownikNotFoundException ex) {
            // Logger.getLogger(RejestracjaController.class.getName()).log(Level.SEVERE, null, ex);
            JsfUtil.addErrorMessage(ResourceBundle.getBundle("pl.alfaprojekt.view.msgs").getString("ConfirmRejestracjaForm.invalidTokenForEmail"));
        } catch (UzytkownikAlreadyConfirmedException ex) {
            JsfUtil.addErrorMessage(ResourceBundle.getBundle("pl.alfaprojekt.view.msgs").getString("ConfirmRejestracjaForm.alreadyConfirmed"));
        }
        return null;
    }

    private void sendNotification(String email, String codeEmail, String password) throws MessagingException {

        HttpServletRequest req = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        String serverName = req.getServerName();
        int serverPort = req.getServerPort();
        String contextPath = req.getContextPath();
        String confirmUrl = "http://";
        confirmUrl += serverName;
        if (serverPort != 80) {
            confirmUrl += ":" + serverPort;
        }
        confirmUrl += contextPath;
        confirmUrl += "/faces/guest/rejestracjaPotwierdzenie.xhtml?token=" + codeEmail + "&email=" + email;

        ResourceBundle bundle = ResourceBundle.getBundle("pl.alfaprojekt.view.msgs");
        String subject = bundle.getString("CreateRejestracjaFormEmailSubject");
        String body = bundle.getString("CreateRejestracjaFormEmailBody");
        String messageText = MessageFormat.format(body, confirmUrl, password);
        // mailSession.setDebug(true);
        MimeMessage message = new MimeMessage(mailSession);

        Address toAddress = new InternetAddress(email);
        message.setRecipient(Message.RecipientType.TO, toAddress);
        message.setSubject(subject);
        message.setText(messageText);
        message.saveChanges();

        Transport tr = mailSession.getTransport();
        String serverPassword = mailSession.getProperty("mail.password");
        tr.connect(null, serverPassword);
        tr.sendMessage(message, message.getAllRecipients());
        tr.close();
    }

    public void validateRejestracja(ComponentSystemEvent event) {
        FacesContext fc = FacesContext.getCurrentInstance();
        UIComponent components = event.getComponent();
        UIInput nazwaInput = (UIInput) components.findComponent("nazwa");
        UIInput nazwiskoInput = (UIInput) components.findComponent("nazwisko");

        if ((nazwaInput.getLocalValue() == null || nazwaInput.getLocalValue().toString().length() == 0)
                && (nazwiskoInput.getLocalValue() == null || nazwiskoInput.getLocalValue().toString().length() == 0)) {
            nazwaInput.setValid(false);
            nazwiskoInput.setValid(false);

            JsfUtil.addErrorMessage(nazwaInput.getClientId(), ResourceBundle.getBundle("pl.alfaprojekt.view.msgs").getString("CreateRejestracjaForm.NameOrSurnameRequired"));
            JsfUtil.addErrorMessage(nazwiskoInput.getClientId(), ResourceBundle.getBundle("pl.alfaprojekt.view.msgs").getString("CreateRejestracjaForm.NameOrSurnameRequired"));

            fc.renderResponse();
        } else {
            nazwaInput.setValid(true);
            nazwiskoInput.setValid(true);
        }
    }

    public void changeTypeOfBusiness() {
        log.log(Level.INFO, "changeTypeOfBusiness xxx");
        log.log(Level.INFO, "current.getSrdSrdId():" + current.getSrdSrdId());
        // FacesContext.getCurrentInstance().renderResponse();
    }
   
}

PrimeFaces 3.2| WebLogic 12c | Mojarra (JSF 2.0,1.0.0.0_2-0-2)
NetBeans 7.1.1 | JDK1.7 | Java EE 5
Windows 7, Google Chrome, Firefox, IE9


Posts: 14
hello smithh032772
Are you here?

So as you see, i have two options:

1.
<p:ajax event="change"
                                    update="rejestracjaFormPanelImie"
                                    listener="#{rejestracjaController.changeTypeOfBusiness}"
                                    process="@this" />

process="@this" is default value.
but when i change a value of select the value of p:inputText id="imie" will be reset to empty string.
How can i fill in this imie field?

2.
 <p:ajax event="change"
                                        update="rejestracjaFormPanelImie"
                                        listener="#{rejestracjaController.changeTypeOfBusiness}"
                                        process="@this, imie" />

in this case, validation is processed and even if for some options, the field should not be rendered, it is, with message from validator.
How can i skip validation process?
One more thing, when i fill imie, required and rendered field and then submit form
<h:commandButton action="#{rejestracjaController.createBusiness}" value="#{msgs.CreateRejestracjaFormSaveLink}" />

and the validation will be failed, then change the select value, the field will not be rendered but the value of imie will be remembered in entity bean.
PrimeFaces 3.2| WebLogic 12c | Mojarra (JSF 2.0,1.0.0.0_2-0-2)
NetBeans 7.1.1 | JDK1.7 | Java EE 5
Windows 7, Google Chrome, Firefox, IE9


Posts: 5945
1. Revisit the forum topic where I shared code related to dynamically rendering components via selectOneMenu. click URL below.

viewtopic.php?f=3&t=19955&p=62120#p62125

2. Also, study the xhtml and bean in the following showcase sample (click URL below):

http://www.primefaces.org/showcase-labs ... Select.jsf

3. I do 'not' use process="..." and I do 'not' use required="...". I use 'bean'/controller to:
a. set 'default' values before page is rendered
b. validate form data or enduser entered/selected data
c. ensure that (required) fields have a value entered/selected by enduser
d. add facesmessages, during validation in bean and if user is 'required' to enter data in a (required) field

4. required="..." introduces requirements or a set of issues that you have to deal with as a developer; earlier, you asked about redesign; i would remove required="..." and handle that in your bean on form POST, or search this forum or stackoverflow.com for sample code where other people are using it, successfully. :)
Howard

PrimeFaces 5.1, Extensions 2.1.0, Push (Atmosphere 2.2.3)
TomEE+ 1.7.1 (Tomcat 7.0.55), MyFaces Core 2.2.5, JDK8
JUEL 2.2.7 | OmniFaces | EclipseLink-JPA/Derby | Chrome

Java EE 6 Tutorial|NetBeans|Google|Stackoverflow|PrimeFaces|Apache

Previous

Return to General