validar validacion vacios formularios formulario enviar ejemplos ejemplo crear con campos antes javascript jsf localization resourcebundle

validacion - validar formulario javascript html5



Pasar mensajes de JavaScript localizados de paquetes de recursos utilizando JSF (3)

He creado una aplicación con JSF y todos los mensajes emitidos por el servidor están localizados con paquetes de recursos.

Mi pregunta es: ¿cómo obtener mensajes emitidos en el navegador del cliente con javascipt localizado con los mensajes almacenados en los paquetes de recursos?

¿Tengo que generar javascript de forma dinámica y, de ser así, cómo puedo hacerlo?

Por ejemplo, ¿cómo puedo hacer que el servidor localice el mensaje de javascript «de alerta» en el siguiente método de validación de formulario:

function valider() { typeActionRadio = document.getElementById("membres_editer_creer:typeActionAdr"); if (typeActionRadio.style.display == "block") { var boutonsRadio = document.forms["membres_editer_creer"]["membres_editer_creer:typeActionAdr"]; for ( var i = 0; i < boutonsRadio.length; i++) if (boutonsRadio.item(i).checked) return true; } alert ("Vous devez indiquer la raison du changement d''adresse (bouton radio à sélectionner)."); return false; }


si desea proporcionar todas las claves, use algo así en su plantilla principal, etc.

<script type="text/javascript"> var msg = new Object(); <c:forEach items="#{msg.keySet()}" var="key"> msg.#{key} = "#{msg[key]}"; </c:forEach> </script>



la respuesta de wutzebaer es correcta pero tiene un problema cuando las variables de un literal tienen un punto, como "person.name"

<script type="text/javascript"> var msg = new Object(); <c:forEach items="#{msg.keySet()}" var="key"> try{ //msgTempl.#{key} = "#{msg[key]}"; msg[''#{key}''] = "#{msg[key]}"; //works better than msgTempl.#{key} = "#{msg[key]}"; when the key contains dots like ''fields.name'' }catch(e){ console.log("error fullfilling the msgForms resource from bundle " +e); } </c:forEach> </script>

eso funcionó para mí, pero el netbeans muestra este error:

Error: The prefix "c" for the "c: forEach" element is not linked.

porque había puesto una etiqueta JSTL en una secuencia de comandos, pero funciona bien, sin embargo

también hay otra manera de hacerlo

@ManagedBean(name = "ResouceBundle") @ApplicationScoped public class ResouceBundle implements Serializable { private static final long serialVersionUID = 1L; //needed because the bean is application|session|view and it needs to be Serializable public String msg; @PostConstruct public void init() { this.msg = createResourceBundleJSON("resourceName"); } public String createResourceBundleJSON(String resourceName) { FacesContext context = FacesContext.getCurrentInstance(); ResourceBundle bundle = context.getApplication().getResourceBundle(context, resourceName); JSONObject jsonObj = new JSONObject(); Set<String> keys = bundle.keySet(); for (String key : keys) { jsonObj.put(key, JSONObject.wrap(bundle.getString(key))); } return jsonObj.toString(); } public String getMsg() { return msg; } public static long getSerialVersionUID() { return serialVersionUID; } }

y luego, en el XHTML, solo escribe:

<script type="text/javascript"> var msg = #{ResouceBundle.msg} </script>