Arquivo de janeiro, 2015

O Django possibilita trabalhar com Javascript de um modo automático e fácil, um destes modos é utilizando diretórios estáticos. Websites geralmente precisam servir arquivos adicionais, tais como imagens, JavaScript, ou CSS. Em Django, nos referimos a esses arquivos como arquivos estáticos e você pode configura-los facilmente utilizando algumas variáveis disponíveis no arquivo de configuração em um projeto Django. Um outro modo de utilizar Javascript e CSS em Django é utilizando os Form Assets que permitem utilizar uma combinação exata de CSS e JavaScript necessários para uma determinada página, dependendo dos widgets que estão em uso nessa página.

Static: https://docs.djangoproject.com/en/1.7/howto/static-files/

Form Assets: https://docs.djangoproject.com/en/1.7/topics/forms/media/

Usando uma Biblioteca Externa

1 – Crie um projeto e uma aplicação Django e configure o banco de dados MySQL, o diretório de templates e arquivos estáticos adequadamente para isto veja o código abaixo para o arquivo do projeto settings.py. Crie seu modelo, visão, template e form também de acordo os arquivos abaixo. Crie o arquivo meujsteste.js dentro das pastas estáticas que você também precisa criar chamadas assets/javascript:

Static - Javascript

Static – Javascript

2 – Verifique a estrutura do seu projeto para o template e o javascript, use a figura abaixo para referencia:

Django - diretórios

Django – diretórios

3 – Rode sua aplicação, no navegador clique com o botão direito e escolha exibir código fonte, verifique que os atributos do form e a variável estática do template formaram o HTML necessário para que os eventos javascript funcionem corretamente com o formulário Django:

Django - App - Código - Navegador

Django – App – Código – Navegador

4 – Teste a sua aplicação entrando e saindo do campo de texto para o nome e o evento javascript será disparado:

Django - Form - Javascript

Django – Form – Javascript

Exemplo:

Neste exemplo utilizamos Javascript através das configurações estáticas para imprimir na página os eventos de entrada e saída do mouse em um Widget CharField do Django utilizando atributos adicionais para criar o código HTML.

Python

settings.py

"""
Django settings for MeuDjango project.

For more information on this file, see
https://docs.djangoproject.com/en/1.6/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.6/ref/settings/
"""

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))

# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.6/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '*0qj3@ul9n3k)%xbgxfqwwxm!+2f$1&)i*k1ft85(b-7kz)9q^'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

TEMPLATE_DEBUG = True

ALLOWED_HOSTS = []

# Application definition

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'meusite',
)

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',

)

ROOT_URLCONF = 'MeuDjango.urls'

WSGI_APPLICATION = 'MeuDjango.wsgi.application'

# Database
# https://docs.djangoproject.com/en/1.6/ref/settings/#databases

DATABASES = {
    'default': {
        'NAME': 'DAsandbox',
        'ENGINE': 'mysql.connector.django',
        'USER': 'root',
        'PASSWORD': 'minhasenha',
        'OPTIONS': {
          'autocommit': True,
        },
    }
}

# Internationalization
# https://docs.djangoproject.com/en/1.6/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.6/howto/static-files/

STATIC_URL = '/static/'

# Django - diretorios estaticos
STATICFILES_DIRS = (os.path.join(BASE_DIR, "static"),)

# Django - Templates
TEMPLATE_DIRS = (os.path.join(BASE_DIR, "static", "template"),)

model.py

from django.db import models

# Cria modelo
class Funcionario (models.Model):
    nome = models.CharField(max_length=30)
    sobrenome = models.CharField(max_length=50)
    cargo = models.CharField(max_length=50)
    salario = models.DecimalField(max_digits=19, decimal_places=10)

    # Define unicode para o Django Admin
    def __unicode__(self):
        return self.nome

view.py

from django.shortcuts import render, render_to_response, RequestContext
from django.http import HttpResponse

# Importa form
from meusite.forms import MeuForm

# Exibe View
def home(request):

    # Cria form
    form = MeuForm(request.POST or None)   

    # Valida e salva
    if form.is_valid():
        salvar = form.save(commit=False)
        salvar.save()
        return HttpResponse("Dados inseridos com sucesso!")

    # Chama Template
    return render_to_response("devaberto.html",
                              locals(),
                              context_instance = RequestContext(request))

template – devaberto.html

{% load static %}
<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="utf-8">
		<script type="text/javascript" src='{% static "assets/javascript/meujsteste.js" %}'></script>
	</head>
	<body>
		<div>
			<header>
				<h1>Desenvolvimento Aberto</h1>
				<h2>Django - Validations </h2>
			</header>
			<div>
				<p>
					Meu Formulário
				</p>
				<form method="post" action="">
					{% csrf_token %}
					{{ form.as_p }}
					<input type="submit" />
				</form>
			</div>
		</div>
		<!-- Div - logs do evento javascript -->
		<div id="meulog">  </div>

	</body>
</html>

forms.py

from  django import forms

# Importa modelo
from models import Funcionario

# Cria classe do form para o modelo
class MeuForm(forms.ModelForm):
    nome = forms.CharField(widget=forms.TextInput(attrs={'onmouseover':'meuMouseOver()', 'onmouseout':'meuMouseOut()'}))
    sobrenome = forms.CharField()
    cargo = forms.CharField()
    salario = forms.DecimalField()

    # Associa formulario ao modelo
    class Meta:
        model = Funcionario

    # Django Validations  - customizar
    def clean_sobrenome(self):
        snome = self.cleaned_data['sobrenome']
        if len(snome) <= 3:
            raise forms.ValidationError("Sobrenome precisa conter mais de 3 caracteres.")
        return snome

Javascript – meujsteste.js

// Desenvolvimento Aberto
// Javascript teste

function meuMouseOver() {
    var div = document.getElementById('meulog');

    div.innerHTML = div.innerHTML + 'Você entrou no campo nome ';
}

function meuMouseOut() {
    var div = document.getElementById('meulog');

    div.innerHTML = div.innerHTML + 'Você saiu do campo nome ';
}

Publicidade

O Rails possibilita trabalhar com Javascript de um modo automático e moderno, um  destes modos é o Asset Pipeline (pipeline ativo) que fornece uma estrutura para concatenar e minimizar ou comprimir JavaScript e CSS ativos. Ele também adiciona a capacidade de escrever esses ativos em outros idiomas e pré processadores como CoffeeScript, Sass e ERB. O pipeline ativo é ativado por padrão mas você pode desabilita-lo quando necessário. A outra forma de usar Javascript é utilizando Unobtrusive Javascript, o Rails usa uma técnica chamada “Unobtrusive JavaScript” para lidar/anexar com o JavaScript no DOM. Esta função é geralmente considerada uma das melhores práticas dentro da comunidade de desenvolvimento Frontend.

Asset Pipeline: http://guides.rubyonrails.org/asset_pipeline.html

Unobtrusive JavaScript: http://guides.rubyonrails.org/working_with_javascript_in_rails.html

Usando uma Biblioteca Externa

1 – Crie um projeto Rails para o banco de dados MySQL, e configure adequadamente, criando um modelo, uma visão e um controle de acordo com o código abaixo. Para utilizar o Javascript vamos usar o Asset Pipeline que já é habilitado por padrão no Rails. Abra a pasta App do seu projeto e em seguida a pasta Assets/Javascript, crie um pasta dentro dela chamada DAscripts:

Asset Pipeline - Dascripts

Asset Pipeline – Dascripts

2 – Crie um arquivo chamado meujsteste.js e utilize o respectivo código logo abaixo:

Javascript - MeujsTeste.js

Javascript – MeujsTeste.js

3 – Use os códigos abaixo, rode sua aplicação e no navegado exiba o código fonte. Você pode ver que o Rails criou automaticamente as tags de script HTML apontando para seu Asset para utilizarmos as funções javascript que definimos na visão:

Rails - Exibir Código do Navegador

Rails – Exibir Código do Navegador

4 – Você pode utilizar o mouse no campo de entrada para que o evento seja disparado e o javascript exiba um log da ação que o usuário está efetuando:

Ruby on Rails - App

Ruby on Rails – App

Exemplo:

Neste exemplo utilizamos Javascript através do Asset Pipeline para imprimir na página os eventos de entrada e saída do mouse em um componente Text_Field do Rails.

Modelo – modelo01.rb

class Modelo01 < ActiveRecord::Base
  
  # Cria validação
  validates  :nome, :sobrenome, :cargo, :salario, :presence => true
  
end

Visão – index.html.erb

<h1>Desenvolvimento Aberto</h1>
<h2>Ruby on Rails - Validate </h2>

<%= form_for @modelo, :url => {:action => :create} do  |cad|%>

<% if @modelo.errors.any?  %>
<h3>Erros: </h3>
<ul style="color:red">
	<% @modelo.errors.full_messages.each do |menssagem| %>
	<li>
		<%= menssagem %>
	</li>
	<% end %>
</ul>
<% end %>

<p>
	<%= cad.label :nome%>
	<br />
	<%= cad.text_field :nome , :onmouseover=>"meuMouseOver()", :onmouseout=>"meuMouseOut()" %>
</p>

<p>
	<%= cad.label :sobrenome%>
	<br />
	<%= cad.text_field :sobrenome, :size => "35x10"%>
</p>

<p>
	<%= cad.label :cargo%>
	<br />
	<%= cad.text_field :cargo, :size => "30x10"%>
</p>

<p>
	<%= cad.label :salario%>
	<br />
	<%= cad.text_field :salario, :size => "15x10"%>
</p>

<p>
	<%= cad.submit "Adicionar dados" %>
</p>

<% end %>

<!-- Div - logs do evento javascript -->
<div id="meulog"></div>

Controlador – meucontrole_controller.erb

class MeucontroleController < ApplicationController

  # Controladores
  def index
    @modelo  = Modelo01.new
  end

  def new
    @modelo  = Modelo01.new
  end

  # Cria registro
  def create
    @modelo = Modelo01.new(modelo_params)
    if @modelo.save

      # Você pode colocar uma menssagem aqui.
      render "index"
    else
      render "index"
    end
  end

  # Define parametros requeridos
  private

  def modelo_params
    params.require(:modelo01).permit(:nome, :sobrenome, :cargo, :salario)
  end

end

Javascript – meujsteste.js

// Desenvolvimento Aberto
// Javascript teste
 
function meuMouseOver() {
    var div = document.getElementById('meulog');
 
    div.innerHTML = div.innerHTML + 'Você entrou no campo nome ';
}
 
function meuMouseOut() {
    var div = document.getElementById('meulog');
 
    div.innerHTML = div.innerHTML + 'Você saiu do campo nome ';
}

ASP NET – Usando Javascript – C#

Publicado: 21 de janeiro de 2015 em C#, JavaScript

O Javascript se tornou uma parte muito importante da tecnologia ASP.NET, seus modelos oferecem aos desenvolvedores muitas maneiras de trabalhar corretamente com suas funções de JavaScript em páginas ASP.NET. Você pode utilizar desde as tradicionais tags de scripts para utilizar código Javascript em uma página ou utilizar classes que gerenciam scripts em uma aplicação ASP.NET.  Contudo as páginas ASP.NET sempre foram consideras lentas, principalmente em suas versões iniciais, basta procurar no Google por “lentidão ASP.NET” e encontrará uma enxurrada de artigos sobre o assunto. Com inúmeras reclamações de desempenho, o Javascript, Ajax, JQuery e outras bibliotecas foram incorporadas ao ASP.NET ao longo de sua evolução se tornando parte de seus Templates oficiais, deste modo a Microsoft também passou a incorporar o Javascript em sua biblioteca de linguagens e em suas mais recentes tecnologias (Windows Phone e App Store), criando sua própria documentação e contribuindo para a evolução da linguagem.

ASP.NET - Lento ???

ASP.NET – Lento ???

Javascript: https://msdn.microsoft.com/en-us/library/ie/yek4tbz0(v=vs.94).aspx

Por fim, afim de proporcionar uma tecnologia mais leve e dinâmica a Microsoft criou inúmeras melhorias e modificações sobre como os scripts podem ser utilizados na plataforma, criando assim novas classes e marcando velhas classes como obsoletas, como por exemplo Page.RegisterClientScriptBlock() foi substituído nas novas versões por ClientScriptManager.ClientScriptBlockRegistered() e por ai vai. A Microsoft também tornou o ASP.NET grátis e abriu seu código sob a licença Apache, para que seja mais competitivo diante de outras tecnologias Web, como o Ruby on Rails, referencia citada na pagina oficial do ASP.NET, que inspirou a versão ASP.NET com Pattern MVCUnobtrusive Javascript, o Rails também possui integração nativa com JQuery, Ajax e outros frameworks como CoffeeScript e NodeJS. Deste modo utilizar o ASP.NET para desenvolver aplicações Web se faz importante que o desenvolvedor sempre esteja atualizado e antenado com as novas modificações da plataforma.

Web Application - Template - Javascript

Web Application – Template – Javascript

Alguns arquivos Javascript de um template são usados pelo Visual Studio e outros pela própria aplicação, para uma introdução sobre como estes arquivos são utilizado você pode consultar esta pagina:

ASP.NET Javascript: http://www.asp.net/web-forms/overview/client-script,-jquery,-and-ajax

Usando uma Biblioteca Externa

1 – Crie um projeto web do tipo C# Empty e crie uma pagina Web Forms chamada default.aspx. Vamos começar de um modo simples utilizando apenas um arquivo Javascript externo, entretanto vamos utilizar validações usando os componentes visuais e precisamos desabilitar as novas validações Javascript Unobtrusive que são o novo padrão para o ASP.NET faremos isto modificando o arquivo Web.config.

Crie uma nova pasta chamada DAScripts e dentro crie um novo arquivo Javascript chamado MeujsTeste.js:

Javascript

Javascript

2 – Na tag Head de sua página crie uma nova tag Script e utilize os recursos do editor para localizar seu arquivo:

Visual Studio - Pick URL

Visual Studio – Pick URL

3 – Selecione seu arquivo Javascript:

MeujsTeste.js

MeujsTeste.js

4 – Utilize os códigos abaixo para cada arquivo e rode sua aplicação :

Javascript - Eventos

Javascript – Eventos

Exemplo:

Neste exemplo utilizamos Javascript para imprimir na página os eventos de entrada e saída do mouse em um componente TextBox do WebForms.

default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="default.aspx.cs" Inherits="DAWebApp001._default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <style type="text/css">
        .auto-style2 {
            width: 14%;
        }

        .auto-style3 {
            height: 23px;
        }

        .auto-style5 {
            width: 248px;
        }

        .auto-style6 {
            width: 54%;
        }

        .auto-style8 {
            height: 23px;
            width: 54%;
        }

        .auto-style9 {
            height: 23px;
            width: 248px;
        }
    </style>

  <script type="text/javascript" src="DAScripts/MeujsTeste.js"></script>
</head>
<body>
    <h1>Desenvolvimento Aberto - ASP.NET</h1>
    <h2>Validação de Controles</h2>
    <form id="form1" runat="server">
        <div>

            <table style="width: 100%;">
                <tr>
                    <td class="auto-style3" colspan="2">
                        <asp:Label ID="LabelMenssagem" runat="server" Text="Entre com os dados abaixo:"></asp:Label>
                    </td>
                    <td class="auto-style8"></td>
                </tr>
                <tr>
                    <td class="auto-style2">
                        <asp:Label ID="Label2" runat="server" Text="Nome:"></asp:Label>
                    </td>
                    <td class="auto-style5">
                        <asp:TextBox ID="TextBox1nome" onMouseOver="meuMouseOver()" onMouseOut="meuMouseOut()" runat="server" Width="142px" ></asp:TextBox>
                    </td>
                    <td class="auto-style6">
                        <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1nome" ErrorMessage="Nome é obrigatório." ForeColor="Red" ValidationGroup="AllValidator"></asp:RequiredFieldValidator>
                    </td>
                </tr>
                <tr>
                    <td class="auto-style3">
                        <asp:Label ID="Label3" runat="server" Text="Sobrenome:"></asp:Label>
                    </td>
                    <td class="auto-style9">
                        <asp:TextBox ID="TextBox2sobrenome" runat="server" Width="240px"></asp:TextBox>
                    </td>
                    <td class="auto-style8">
                        <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="TextBox2sobrenome" ErrorMessage="Sobrenome é obrigatório." ForeColor="Red" ValidationGroup="AllValidator"></asp:RequiredFieldValidator>
                    </td>
                </tr>
                <tr>
                    <td class="auto-style3">
                        <asp:Label ID="Label4" runat="server" Text="Cargo:"></asp:Label>
                    </td>
                    <td class="auto-style9">
                        <asp:TextBox ID="TextBox3cargo" runat="server" Width="186px"></asp:TextBox>
                    </td>
                    <td class="auto-style8">
                        <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="TextBox3cargo" ErrorMessage="Cargo é obrigatório." ForeColor="Red" ValidationGroup="AllValidator"></asp:RequiredFieldValidator>
                    </td>
                </tr>
                <tr>
                    <td class="auto-style3">
                        <asp:Label ID="Label5" runat="server" Text="Salário:"></asp:Label>
                    </td>
                    <td class="auto-style9">
                        <asp:TextBox ID="TextBox4salario" runat="server"></asp:TextBox>
                    </td>
                    <td class="auto-style8">
                        <asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" ControlToValidate="TextBox4salario" ErrorMessage="Salário é obrigatório. " ForeColor="Red" ValidationGroup="AllValidator"></asp:RequiredFieldValidator>
                    </td>
                </tr>
                <tr>
                    <td class="auto-style3">&nbsp;</td>
                    <td class="auto-style9">&nbsp;</td>
                    <td class="auto-style8">&nbsp;</td>
                </tr>
                <tr>
                    <td class="auto-style3">
                        <asp:Button ID="Button1enviardados" runat="server" Text="Enviar Dados" OnClick="Button1enviardados_Click" ValidationGroup="AllValidator" />
                    </td>
                    <td class="auto-style9">&nbsp;</td>
                    <td class="auto-style8">&nbsp;</td>
                </tr>
            </table>
            <!-- Div - logs do evento javascript -->
            <div id="meulog"></div>
        </div>
    </form>
</body>
</html>

default.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace DAWebApp001
{
    public partial class _default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1enviardados_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                // Envia menssagem quando todos os campos requeridos
                // forem preenchidos tornando a página valida.
                LabelMenssagem.ForeColor = System.Drawing.Color.Green;
                LabelMenssagem.Text = "Dados enviados com sucesso.";
            }

        }
    }
}

MeujsTeste.js

// Desenvolvimento Aberto
// Javascript teste

function meuMouseOver() {
    var div = document.getElementById('meulog');

    div.innerHTML = div.innerHTML + 'Você entrou no campo nome ';
}

function meuMouseOut() {
    var div = document.getElementById('meulog');

    div.innerHTML = div.innerHTML + 'Você saiu do campo nome ';
}

Web.config

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  </system.web>

  <appSettings>
    <add key="ValidationSettings:UnobtrusiveValidationMode" value="None"/>
  </appSettings>

</configuration>

JSF – Usando Javascript – Java

Publicado: 20 de janeiro de 2015 em Java, JavaScript

O h:outputScript apresenta um elemento HTML do tipo script como um javascript. Está tag é usada para adicionar javascript de um arquivo externo em uma página JSF. Você pode colocar arquivos de script em um diretório de recursos na raiz da sua aplicação web. Subdiretórios deste diretório são chamados de bibliotecas, você pode criar todas as bibliotecas como quiser, como por exemplo uma biblioteca de imagens, de javascripts ou arquivos css.

h:outputScript: https://javaserverfaces.java.net/docs/2.2/vdldocs/facelets/h/outputScript.html

Usando uma Biblioteca Externa

1 – Crie um projeto web dinâmico JSF e na pasta WebContent crie uma pasta chamada resources e dentro dela as pastas, images, js e css:

JSF - WebContent

JSF – WebContent

2 – Na pasta js crie um novo arquivo javascript de acordo com o código abaixo:

JSF - Javascript

JSF – Javascript

3 – Na pagina xhtml na tag Head utilize o outputScript e alimente os parâmetros para o nome do arquivo e sua pasta no qual é a biblioteca javascript está localizada, crie um elemento DIV no final da pagina no qual o Javacript adicionará o resultado dos eventos disparados e por fim adicione os eventos no elemento de texto do campo nome:

JSF - Aplicação

JSF – Aplicação

Exemplo:

Neste exemplo utilizamos um arquivo javascript externo para criar a funcionalidade para os evento de entrada e saída do mouse sobre um elemento de entrada de texto.

Java

Managed Bean – Participante

package org.desenvolvimento.aberto;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

// Define decoradores
@ManagedBean(name = "Participante")
@RequestScoped
public class Participante {

	// Define atributos privados
	private long id;
	private String nome;
	private String sobrenome;
	private String cargo;
	private Double salario;

	// Metodos Getter e Setter
	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getSobrenome() {
		return sobrenome;
	}

	public void setSobrenome(String sobrenome) {
		this.sobrenome = sobrenome;
	}

	public String getCargo() {
		return cargo;
	}

	public void setCargo(String cargo) {
		this.cargo = cargo;
	}

	public Double getSalario() {
		return salario;
	}

	public void setSalario(Double salario) {
		this.salario = salario;
	}

	// Método de Ação (clique do botão)
	public String Acao() {
		System.out.println("Clique do botão");
		System.out.println("Nome: " + this.getNome() + "\n " +
						   "Sobrenome: " + this.getSobrenome() + "\n " +
						   "Cargo: " + this.getCargo() + "\n " +
						   "Salário: " + this.getSalario() + "\n ");
		return null;
	}
}

Index.xhtml

<!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">

<f:loadBundle basename="resources.application" var="msg" />

<head>
<title><h:outputText value="#{msg.welcomeTitle}" /></title>
<h:outputScript name="testejs.js" library="js"></h:outputScript>
</head>

<h:body>
	<h2>JSF - Desenvolvimento Aberto - Managed Beans -</h2>
	<h3>
		<h:outputText id="lnome" value="Validação - Cadastros:" />
	</h3>
	<h:form>
		<h:panelGrid columns="3" cellpadding="2px">
			<h:outputText id="lnome" value="Nome:" />
			<h:inputText id="tnome" value="#{Participante.nome}" size="30"
				required="true" label="Nome" onmouseover="meuMouseOver()"
				onmouseout="meuMouseOut()" />
			<h:message for="tnome" style="color:red" />

			<h:outputText id="lsobrenome" value="Sobrenome:" />
			<h:inputText id="tsobrenome" value="#{Participante.sobrenome}"
				size="40" required="true" label="Sobrenome" />
			<h:message for="tsobrenome" style="color:red" />

			<h:outputText id="lcargo" value="Cargo" />
			<h:inputText id="tcargo" value="#{Participante.cargo}" size="25"
				required="true" label="Cargo" />
			<h:message for="tcargo" style="color:red" />

			<h:outputText id="lsalario" value="Salário" />
			<h:inputText id="tsalario" value="#{Participante.salario}"
				required="true" label="Salário"
				requiredMessage="#{msg['requerido.salario']}"
				validatorMessage="#{msg['validar.salario']}">

				<f:validateDoubleRange minimum="788.00" maximum="9999.99" />
			</h:inputText>

			<h:message for="tsalario" style="color:red" />

		</h:panelGrid>
		<br />
		<h:commandButton id="botao" action="#{Participante.Acao}"
			value="Enviar Dados" />

		<div id="meulog"></div>
	</h:form>
</h:body>
</html>

Javascript – testejs001.js

function meuMouseOver()
{
	var div = document.getElementById('meulog');

	div.innerHTML = div.innerHTML + 'Você entrou no campo nome ';
}

function meuMouseOut()
{
	var div = document.getElementById('meulog');

	div.innerHTML = div.innerHTML + 'Você saiu do campo nome ';
}

JSF – Validations – Java

Publicado: 19 de janeiro de 2015 em Java

As validações permitem que você adicione uma validação de modo que quando um usuário editar ou inserir dados em um campo e enviar o formulário, os dados serão validados contra todas as regras e condições estabelecidas. Se a validação falhar, o aplicativo exibe uma mensagem de erro. Você pode utilizar as tags do JSF Core (f) para trabalhar com validações dos elementos do JSF HTML (h), executando assim validações de vários tipos sobre os dados alimentados pelos usuários de sua aplicação.

Validações JFS (f) Core

  1. f: ValidateLength – Valida comprimento de uma string.
  2. f: validateLongRange – Valida gama de valor numérico.
  3. f: validateDoubleRange – Valida gama de valor flutuante.
  4. f: validateRegex – Validar componente JSF com uma determinada expressão regular.

Ainda é possível que você crie suas próprias validações customizadas implementando sua classe com a interface javax.faces.validator.

Validação: ValidateDoubleRange

Validando Campos de Entrada

1- Crie uma aplicação web dinâmica JSF. Vamos utilizar as propriedades para customizar as mensagens que vamos emitir para a interface do usuário, abra as propriedades de sua aplicação e as modifique de acordo com  a figura abaixo:

JSF - Properties - Mensagens

JSF – Properties – Mensagens

3 – Utilize os códigos abaixo para criar os arquivos de sua aplicação. Criaremos um Managed Bean com um detalhe para o campo salário, ao invés de utilizarmos um tipo double primitivo vamos utilizar a classe Double para armazenar o valor no qual será manipulado pela UI da página utilizando elementos do JSF Core para a validação:

JSF - validateDoubleRange

JSF – validateDoubleRange

4 – Na tag de validação de alcance, definimos um valor máximo e um valor mínimo para a entrada do usuário, se o valor inserido não satisfazer as regras aplicadas então a mensagem definida será exibida.

JSF - Validation

JSF – Validation

Exemplo:

Neste exemplo definimos dois tipos de validação para o campo salário, no qual primeiro o definimos como campo obrigatório e por fim definimos um valor mínimo e um valor máximo para o salário. Este é um exemplo fictício de como deve funcionar as validações na UI, em um ambiente profissional este tipo de validação para salário não deve ser feita diretamente na interface de usuário e sim na camada de negocio de sua aplicação.

Java

Participante – Managed Bean

package org.desenvolvimento.aberto;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

// Define decoradores
@ManagedBean(name = "Participante")
@RequestScoped
public class Participante {

	// Define atributos privados
	private long id;
	private String nome;
	private String sobrenome;
	private String cargo;
	private Double salario;

	// Metodos Getter e Setter
	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getSobrenome() {
		return sobrenome;
	}

	public void setSobrenome(String sobrenome) {
		this.sobrenome = sobrenome;
	}

	public String getCargo() {
		return cargo;
	}

	public void setCargo(String cargo) {
		this.cargo = cargo;
	}

	public Double getSalario() {
		return salario;
	}

	public void setSalario(Double salario) {
		this.salario = salario;
	}

	// Método de Ação (clique do botão)
	public String Acao() {
		System.out.println("Clique do botão");
		System.out.println("Nome: " + this.getNome() + "\n " +
						   "Sobrenome: " + this.getSobrenome() + "\n " +
						   "Cargo: " + this.getCargo() + "\n " +
						   "Salário: " + this.getSalario() + "\n ");
		return null;
	}
}

Html – index.xhtml

<!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">

<f:loadBundle basename="resources.application" var="msg" />

<head>
<title><h:outputText value="#{msg.welcomeTitle}" /></title>
</head>

<h:body>
	<h2>JSF - Desenvolvimento Aberto - Managed Beans -</h2>
	<h3>
		<h:outputText id="lnome" value="Validação - Cadastros:" />
	</h3>
	<h:form>
		<h:panelGrid columns="3" cellpadding="2px">
			<h:outputText id="lnome" value="Nome:" />
			<h:inputText id="tnome" value="#{Participante.nome}" size="30"
				required="true" label="Nome" />
			<h:message for="tnome" style="color:red" />

			<h:outputText id="lsobrenome" value="Sobrenome:" />
			<h:inputText id="tsobrenome" value="#{Participante.sobrenome}"
				size="40" required="true" label="Sobrenome" />
			<h:message for="tsobrenome" style="color:red" />

			<h:outputText id="lcargo" value="Cargo" />
			<h:inputText id="tcargo" value="#{Participante.cargo}" size="25"
				required="true" label="Cargo" />
			<h:message for="tcargo" style="color:red" />

			<h:outputText id="lsalario" value="Salário" />
			<h:inputText id="tsalario" value="#{Participante.salario}"
				required="true" label="Salário"
				requiredMessage="#{msg['requerido.salario']}"
				validatorMessage="#{msg['validar.salario']}">

				<f:validateDoubleRange minimum="788.00" maximum="9999.99" />
			</h:inputText>

			<h:message for="tsalario" style="color:red" />

		</h:panelGrid>
		<br />
		<h:commandButton id="botao" action="#{Participante.Acao}"
			value="Enviar Dados" />
	</h:form>
</h:body>
</html>

Application.properties

# -- welcome --
welcomeTitle=Desenvolvimento Aberto
requerido.salario =O campo salário é obrigatório.
validar.salario =O salário não pode ser menor que o valor minimo atual.

 

 

SAP – Web Dynpro – Validations – Abap

Publicado: 16 de janeiro de 2015 em Abap

Web Dynpro possui algumas funcionalidades que visam facilitar a validação de campos e economizar tempo do desenvolvedor na criação da interface com o usuário. Uma verificação dos campos de entrada requeridos automáticos ainda não estão implementados no Web Dynpro e também não é planejado para o futuro, no entanto existem alguns métodos para executar esta ação. Para validação você pode executar a classe CL_WD_DYNAMIC_TOOL no seu evento ou no evento DoBeforeAction.

Isto significa que a propriedade State com o valor Required no elemento InputField somente exibirá um caractere asterisco na cor vermelha no seu elemento Label Associado, para que ocorra uma validação você precisa escrever códigos que valide o valor do atributo e exiba uma mensagem de acordo com o resultado.

Web Dynpro: Input Fields

Validando Campos Obrigatórios

Neste walkthrough utilizamos um componente e uma aplicação Web Dynpro básica com duas Views. Lembre-se que o Web Dynpro utiliza a arquitetura MVC e você deve criar a rota para suas Views utilizando corretamente os plugs InBound e OutBound na árvore Windows. Caso queira lembrar como configurar uma aplicação básica Web Dynpro clique aqui.

1 – Crie sua View principal (Main) utilizando os componentes básicos como PageHeader, Labels, InputFields, TransparentContainer e Button. Modifique suas propriedades e utilize o layout chamado GridLayout, use a figura abaixo para referencia.

No InputField para o valor cargo, mude sua propriedade state para required:

Web Dynpro - View - Main

Web Dynpro – View – Main

2 – No controlador, crie os atributos para cada campo no contexto:

Web Dynpro - Controlador - Atributos

Web Dynpro – Controlador – Atributos

 

3 – Adicione os atributos no contexto da View principal:

Web Dynpro - View - Contexto

Web Dynpro – View – Contexto

4 – Volte para a View e associe os atributos as campos de entrada:

Web Dynpro - Associar Atributos

Web Dynpro – Associar Atributos

5 – Na segunda View, adicione os atributos para o contexto e arraste para a página os elementos de texto e associe os atributos a seus valores:

Web Dynpro - View- Associar Atributos

Web Dynpro – View- Associar Atributos

6 – Na View Main, na barra de ferramentas escolha Web Dynpro Code Wizard, e na aba atributos escolha o atributo Cargo. Preencha o método WDDOBEFOREACTION para fique igual ao código abaixo:

Web Dynpro - Code Wizard

Web Dynpro – Code Wizard

7 – Ative o componente e teste sua aplicação, entre com o seu usuário e senha e preencha os campos menos o campo com o sinal de asterisco (campo obrigatório):

Web Dynpro - Campo Obrigatório

Web Dynpro – Campo Obrigatório

8 – Assim que você enviar a requisição o campo será validado no evento DoBeforeAction e se o campo tiver com seus valores iniciais, ou seja em branco uma mensagem será exibida e a navegação cancelada:

Web Dynpro - Validação

Web Dynpro – Validação – Mensagem

9 – Quando o campo requerido for satisfeito e a requisição reenviada, o processo será executado com sucesso:

Web Dynpro - Validação - OK

Web Dynpro – Validação – OK

Exemplo:

Neste exemplo utilizamos o evento WDDoBeforeAction para validar o atributo e exibir uma mensagem para que o usuário preencha o campo corretamente:

Abap

method WDDOBEFOREACTION .

   DATA lo_nd_usuario_controler TYPE REF TO if_wd_context_node.

   DATA lo_el_usuario_controler TYPE REF TO if_wd_context_element.
   DATA ls_usuario_controler TYPE wd_this->Element_usuario_controler.
   DATA lv_cargo TYPE wd_this->Element_usuario_controler-cargo.

*  navigate from <CONTEXT> to <USUARIO_CONTROLER> via lead selection
   lo_nd_usuario_controler = wd_context->get_child_node( name = wd_this->wdctx_usuario_controler ).

*  @TODO handle non existant child
*  IF lo_nd_usuario_controler IS INITIAL.
*  ENDIF.

*  get element via lead selection
   lo_el_usuario_controler = lo_nd_usuario_controler->get_element( ).
*  @TODO handle not set lead selection
   IF lo_el_usuario_controler IS INITIAL.
   ENDIF.

*  get single attribute
   lo_el_usuario_controler->get_attribute(
     EXPORTING
       name =  `CARGO`
     IMPORTING
       value = lv_cargo ).

if lv_cargo is initial.

* get message manager
    data lo_api_controller     type ref to if_wd_controller.
    data lo_message_manager    type ref to if_wd_message_manager.

    lo_api_controller ?= wd_This->Wd_Get_Api( ).

    CALL METHOD lo_api_controller->GET_MESSAGE_MANAGER
      RECEIVING
        MESSAGE_MANAGER = lo_message_manager.

* report message
    CALL METHOD lo_message_manager->REPORT_MESSAGE
      EXPORTING
        MESSAGE_TEXT = 'Cargo é um campo obrigatório'
        CANCEL_NAVIGATION = ABAP_TRUE.

ENDIF.

endmethod.

Django – Validations – MySQL – Python

Publicado: 16 de janeiro de 2015 em Python

O Django possui algumas funcionalidades que visam facilitar a validação de campos e economizar tempo do desenvolvedor na criação da interface com o usuário. Por padrão o Django já executa alguma validações de campos requeridos para os formulários que utilizam a classe Form ou os formulários associados ao modelo com a classe ModelForm. Entretanto você pode modificar a validação padrão, as desabilitando ou criando validações customizadas para os campo de seu formulário.

A validação do formulário acontece quando os dados são limpos (Cleaned). Se você quer personalizar este processo, há vários lugares que você pode mudar, cada um servindo a um propósito diferente. A maioria da validações podem ser feitas usando os validadores que são ajudantes simples que podem ser reutilizados facilmente. Validadores são funções simples (ou Callables) que levam um único argumento e chamam o ValidationError para a entrada inválida.

Django Validation: https://docs.djangoproject.com/en/1.7/ref/forms/validation/

Validando Campos Obrigatórios

Neste walkthrough utilizamos um projeto e uma aplicação Django básica, utilizando um modelo, uma visão e um template para exibir o formulário, caso queira saber mais sobre como chegar a está configuração utilize os posts anteriores sobre o Django.

1 – Após configurar seu projeto e sua aplicação, utilize os códigos abaixo para seus respectivos arquivos e rode sua aplicação. Você pode preencher os campos do formulários e salvar o registro no banco de dados:

Django - Formulário

Django – Formulário

2 – Uma vez que a entrada não satisfaça as validações do Django que por padrão requer todos os campos do modelo já que os mesmo não permitem campos nulos, uma mensagem de erro avisará para que você preencha corretamente o campo. No formulário abaixo também criamos uma validação customizada que previne que o usuário não insira qualquer coisa no campo, verificando o tamanho do campo:

Django - Validações

Django – Validações

Exemplo:

Neste exemplo utilizamos as validações padrões do Django para campos requeridos e também criamos uma validação customizada para o campo sobrenome.

Model – models.py

from django.db import models

# Cria modelo
class Funcionario (models.Model):
    nome = models.CharField(max_length=30)
    sobrenome = models.CharField(max_length=50)
    cargo = models.CharField(max_length=50)
    salario = models.DecimalField(max_digits=19, decimal_places=10)

    # Define unicode para o Django Admin
    def __unicode__(self):
        return self.nome

View – view.py

from django.shortcuts import render, render_to_response, RequestContext
from django.http import HttpResponse

# Importa form
from meusite.forms import MeuForm

# Exibe View
def home(request):

    # Cria form
    form = MeuForm(request.POST or None)   

    # Valida e salva
    if form.is_valid():
        salvar = form.save(commit=False)
        salvar.save()
        return HttpResponse("Dados inseridos com sucesso!")

    # Chama Template
    return render_to_response("devaberto.html",
                              locals(),
                              context_instance = RequestContext(request))

Template – devaberto.html

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="utf-8">
	</head>
	<body>
		<div>
			<header>
				<h1>Desenvolvimento Aberto</h1>
				<h2>Django - Validations </h2>
			</header>
			<div>
				<p>
					Meu Formulário
				</p>
				<form method="post" action="">
					{% csrf_token %}
					{{ form.as_p }}
					<input type="submit" />
				</form>
			</div>
		</div>
	</body>
</html>

Form- forms.py

from  django import forms

# Importa modelo
from models import Funcionario

# Cria classe do form para o modelo
class MeuForm(forms.ModelForm):
    nome = forms.CharField()
    sobrenome = forms.CharField()
    cargo = forms.CharField()
    salario = forms.DecimalField()

    # Associa formulario ao modelo
    class Meta:
        model = Funcionario

    # Django Validations  - customizado
    def clean_sobrenome(self):
        snome = self.cleaned_data['sobrenome']
        if len(snome) <= 3:
            raise forms.ValidationError("Sobrenome precisa conter mais de 3 caracteres.")
        return snome

Ruby on Rails – Validations – Linux

Publicado: 15 de janeiro de 2015 em Ruby on Rails

O Active Record possui algumas funcionalidades que visam facilitar a validação de campos e economizar tempo do desenvolvedor na criação da interface com o usuário. O Rails utiliza validações de nível de modelo, está é a melhor maneira de garantir que apenas dados válidos serão salvos em seu banco de dados, pois dados essenciais não podem ser ignorados pelos usuários finais. Rails torna as validações fáceis de usar, fornecendo uma base para ajudar nas necessidades comuns, e também permite que você crie seus próprios métodos de validação.

Validate: http://guides.rubyonrails.org/active_record_validations.html

Validando Campos Obrigatórios

Neste walkthrough utilizamos somente os campos de presença, mas você pode executar outros tipos de validações, você pode ver algumas delas clicando aqui.

1 – Crie um projeto do tipo Rails para o banco de dados MySQL e configure seu projeto corretamente para que seja exibida uma visão da pagina índice de sua aplicação. Tenha certeza que você configurou tudo, use as instruções abaixo para criar o controlador e o modelo:

rails g controller meucontrole index

rails g model modelo01 nome:string sobrenome:string cargo:string salario:float

rake db:migrate

rails server
Rails - Console

Rails – Console

2 – Se estiver utilizando a IDE Aptana Studio, você criará por padrão um projeto para o banco de dados SQLite3, você precisa mudar manualmente o arquivo de conexão (figura acima) e adicionar o GEM chamado mysql2, use a figura abaixo para referencia:

Rails - Aptana - Gem - Mysql2

Rails – Aptana – Gem – Mysql2

3 – Após configurar o arquivo de rotas, utilize os códigos abaixo para preencher seu respectivos arquivos do modelo, visão e controlador. Rode sua aplicação e a chame no navegador e você pode ver que os campos são de preenchimento obrigatórios:

Rails - Model - Validation

Rails – Model – Validation

4 – Uma vez que todos os campos satisfazerem a condição de presença do modelo, o registro será inserido com sucesso no banco de dados:

Rails - Active Record - Save

Rails – Active Record – Save

Exemplo:

Neste exemplo criamos um projeto Rails e utilizamos o controlador para exibir um formulário de campos obrigatórios.

Ruby on Rails

Modelo – modelo01.rb

class Modelo01 < ActiveRecord::Base
  
  # Cria validação
  validates  :nome, :sobrenome, :cargo, :salario, :presence => true
  
end

View – index.html.erb

<h1>Desenvolvimento Aberto</h1>
<h2>Ruby on Rails - Validate </h2>
 
<%= form_for @modelo, :url => {:action => :create} do  |cad|%>
 
 <% if @modelo.errors.any?  %>
       <h3>Erros:  </h3>
       <ul style="color:red">
          <% @modelo.errors.full_messages.each do |menssagem| %>
          <li> <%= menssagem %> </li>
          <% end %>
       </ul>
    <% end %>

    <p>
        <%= cad.label :nome%> <br />
        <%= cad.text_field :nome%>
    </p>

    <p>
        <%= cad.label :sobrenome%> <br />
        <%= cad.text_field :sobrenome, :size => "35x10"%>
    </p>
 
    <p>
        <%= cad.label :cargo%> <br />
        <%= cad.text_field :cargo, :size => "30x10"%>
    </p>
 
    <p>
        <%= cad.label :salario%> <br />
        <%= cad.text_field :salario, :size => "15x10"%>
    </p>
 
   
    <p> <%= cad.submit "Adicionar dados" %></p>
 
<% end %>

Controller- meucontrole_controller.rb

class MeucontroleController < ApplicationController

  # Controladores
  def index
    @modelo  = Modelo01.new
  end

  def new
    @modelo  = Modelo01.new
  end

  # Cria registro
  def create
    @modelo = Modelo01.new(modelo_params)
    if @modelo.save

      # Você pode colocar uma menssagem aqui.
      render "index"
    else
      render "index"
    end
  end

  # Define parametros requeridos
  private

  def modelo_params
    params.require(:modelo01).permit(:nome, :sobrenome, :cargo, :salario)
  end

end

Routes- routes.rb

Rails.application.routes.draw do
  
  get 'meucontrole/index'

  # Define rota do controle
  resources :meucontrole  
 
end


ASP.NET – Validation – C#

Publicado: 15 de janeiro de 2015 em C#

A tecnologia ASP.NET possui algumas funcionalidades que visam facilitar a validação de campos e economizar tempo do desenvolvedor na criação da interface com o usuário. Permitindo trabalhar com alguns controles que executam todas verificações automaticamente, sem necessidade de escrever código. Toda via, por padrão, uma página Web Forms valida automaticamente se usuários mal-intencionados não estão tentando enviar scripts para a sua aplicação, mesmo se você não usar controles de validação.

Validação Contra Exploits: http://msdn.microsoft.com/en-us/library/vstudio/w1sw53ds(v=vs.100).aspx

Por padrão o tipo de validação Unobtrusive também é ativada na nova versão do ASP.NET. Validação Unobtrusive visa diminuir o tamanho da página, substituindo o JavaScript em linha para efetuar uma validação com uma biblioteca JavaScript pequena que usa jQuery. Você pode desabilitar está validação configurando o arquivo web.config.

Validando Campos Obrigatórios

Neste walkthrough utilizamos somente os RequiredFieldValidator, mas você pode executar outros tipos de validações com os componentes encontrados na caixa de ferramentas na opção Validation.

1 – Crie um novo projeto para Web do tipo C# Empty e crie uma nova pagina WebForm, utilize o código abaixo e a imagem para criar o design da sua aplicação:

Asp.Net - Design

Asp.Net – Design

2 – Para executar a validação nenhum código C# é necessário. No botão crie um grupo para os campos que deseja validar usando a propriedade ValidationGroup à preenchendo com AllValidator e nos campos de validação subsequentes também preencha a mesma propriedade com o mesmo valor, definindo os controles do grupo para serem validados, em seguida preencha a mensagem de erro na propriedade ErrorMessage de cada campo de validação. Assim que rodar sua aplicação tente clicar no botão sem preencher nenhum campo e a validação será executada, exibindo a mensagem de erro para os campos requeridos:

Asp.Net - RequiredFieldValidator

Asp.Net – RequiredFieldValidator

3 – Com os campos requeridos devidamente alimentados, a pagina se torna valida e a verificação do evento de clique do botão exibe a mensagem de sucesso:

Asp.Net - Página Valida

Asp.Net – Página Valida

Exemplo:

Neste exemplo criamos uma validação para os campos de texto os tornando de preenchimento obrigatório, para que a aplicação funcione corretamente desabilitamos a validação Unobtrusive já que estamos utilizando a nova versão do ASP.NET no qual ela é padrão. Caso queira usar o novo tipo de validação veja o vídeo abaixo:

Unobtrusive: http://blogs.msdn.com/b/mspfe/archive/2014/07/07/unobtrusive-java-script-validation.aspx

ASP.NET

default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="default.aspx.cs" Inherits="DAWebApp001._default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <style type="text/css">
        .auto-style2 {
            width: 14%;
        }

        .auto-style3 {
            height: 23px;
        }

        .auto-style5 {
            width: 248px;
        }

        .auto-style6 {
            width: 54%;
        }

        .auto-style8 {
            height: 23px;
            width: 54%;
        }

        .auto-style9 {
            height: 23px;
            width: 248px;
        }
    </style>
</head>
<body>
    <h1>Desenvolvimento Aberto - ASP.NET</h1>
    <h2>Validação de Controles</h2>
    <form id="form1" runat="server">
        <div>

            <table style="width: 100%;">
                <tr>
                    <td class="auto-style3" colspan="2">
                        <asp:Label ID="LabelMenssagem" runat="server" Text="Entre com os dados abaixo:"></asp:Label>
                    </td>
                    <td class="auto-style8"></td>
                </tr>
                <tr>
                    <td class="auto-style2">
                        <asp:Label ID="Label2" runat="server" Text="Nome:"></asp:Label>
                    </td>
                    <td class="auto-style5">
                        <asp:TextBox ID="TextBox1nome" runat="server" Width="142px"></asp:TextBox>
                    </td>
                    <td class="auto-style6">
                        <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1nome" ErrorMessage="Nome é obrigatório." ForeColor="Red" ValidationGroup="AllValidator"></asp:RequiredFieldValidator>
                    </td>
                </tr>
                <tr>
                    <td class="auto-style3">
                        <asp:Label ID="Label3" runat="server" Text="Sobrenome:"></asp:Label>
                    </td>
                    <td class="auto-style9">
                        <asp:TextBox ID="TextBox2sobrenome" runat="server" Width="240px"></asp:TextBox>
                    </td>
                    <td class="auto-style8">
                        <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="TextBox2sobrenome" ErrorMessage="Sobrenome é obrigatório." ForeColor="Red" ValidationGroup="AllValidator"></asp:RequiredFieldValidator>
                    </td>
                </tr>
                <tr>
                    <td class="auto-style3">
                        <asp:Label ID="Label4" runat="server" Text="Cargo:"></asp:Label>
                    </td>
                    <td class="auto-style9">
                        <asp:TextBox ID="TextBox3cargo" runat="server" Width="186px"></asp:TextBox>
                    </td>
                    <td class="auto-style8">
                        <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="TextBox3cargo" ErrorMessage="Cargo é obrigatório." ForeColor="Red" ValidationGroup="AllValidator"></asp:RequiredFieldValidator>
                    </td>
                </tr>
                <tr>
                    <td class="auto-style3">
                        <asp:Label ID="Label5" runat="server" Text="Salário:"></asp:Label>
                    </td>
                    <td class="auto-style9">
                        <asp:TextBox ID="TextBox4salario" runat="server"></asp:TextBox>
                    </td>
                    <td class="auto-style8">
                        <asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" ControlToValidate="TextBox4salario" ErrorMessage="Salário é obrigatório. " ForeColor="Red" ValidationGroup="AllValidator"></asp:RequiredFieldValidator>
                    </td>
                </tr>
                <tr>
                    <td class="auto-style3">&nbsp;</td>
                    <td class="auto-style9">&nbsp;</td>
                    <td class="auto-style8">&nbsp;</td>
                </tr>
                <tr>
                    <td class="auto-style3">
                        <asp:Button ID="Button1enviardados" runat="server" Text="Enviar Dados" OnClick="Button1enviardados_Click" ValidationGroup="AllValidator" />
                    </td>
                    <td class="auto-style9">&nbsp;</td>
                    <td class="auto-style8">&nbsp;</td>
                </tr>
            </table>

        </div>
    </form>
</body>
</html>

default.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace DAWebApp001
{
    public partial class _default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1enviardados_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                // Envia menssagem quando todos os campos requeridos
                // forem preenchidos tornando a página valida.
                LabelMenssagem.ForeColor = System.Drawing.Color.Green;
                LabelMenssagem.Text = "Dados enviados com sucesso.";
            }

        }
    }
}

web.congif

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  </system.web>
  <appSettings>
    <add key="ValidationSettings:UnobtrusiveValidationMode" value="None"/>
  </appSettings>
</configuration>

JSF – Messages – Validação – Java

Publicado: 14 de janeiro de 2015 em Java

A tecnologia JavaServer Faces possui algumas funcionalidades que visam facilitar a validação de campos e economizar tempo do desenvolvedor na criação da interface com o usuário. As tags de mensagens chamadas Message e Messages tem como objetivo exibir mensagens para os elementos de uma pagina web. A tag Messages exibe mensagens de uma vez para todos os elementos da página, enquanto a tag Message exibe mensagem para um elemento especificado pelo seu identificador.

Messages: https://javaserverfaces.java.net/docs/2.0/pdldocs/facelets/h/messages.html

Validando Campos Obrigatórios

1 – Crie um projeto web dinâmico JSF, e utilize os códigos abaixo para a pagina xhtml e para o Managed Bean. Verifique na imagem abaixo que utilizamos a tag Message dentro do PanelGrid para cada elemento de validação requerida:

JSF - Design

JSF – Design

2 – Assim que executamos a aplicação e tentamos enviar os campos com valores nulos as mensagens de validação são exibidas para cada campo que não atende sua requisição:

JSF - Message

JSF – Message

3 – Assim que os valores são inseridos nos campos de preenchimento obrigatório, os dados podem ser enviados com sucesso:

JSF - Requisição Atendida

JSF – Requisição Atendida

Exemplo:

Neste exemplo utilizamos as funcionalidades do JSF para validar campos obrigatórios e exibir mensagens para cada campo.

Managed Bean

package org.desenvolvimento.aberto;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

// Define decoradores
@ManagedBean(name = "Participante")
@RequestScoped
public class Participante {

	// Define atributos privados
	private long id;
	private String nome;
	private String sobrenome;
	private String cargo;
	private double salario;

	// Metodos Getter e Setter
	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getSobrenome() {
		return sobrenome;
	}

	public void setSobrenome(String sobrenome) {
		this.sobrenome = sobrenome;
	}

	public String getCargo() {
		return cargo;
	}

	public void setCargo(String cargo) {
		this.cargo = cargo;
	}

	public double getSalario() {
		return salario;
	}

	public void setSalario(double salario) {
		this.salario = salario;
	}

	// Método de Ação (clique do botão)
	public String Acao() {
		System.out.println("Clique do botão");
		System.out.println("Nome: " + this.getNome() + "\n " +
						   "Sobrenome: " + this.getSobrenome() + "\n " +
						   "Cargo: " + this.getCargo() + "\n " +
						   "Salário: " + this.getSalario() + "\n ");
		return null;
	}
}

JSF – xhtml

<!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">

<f:loadBundle basename="resources.application" var="msg" />

<head>
<title><h:outputText value="#{msg.welcomeTitle}" /></title>
</head>

<h:body>
	<h2>JSF - Desenvolvimento Aberto - Managed Beans -</h2>
	<h3>
		<h:outputText id="lnome" value="Validação - Cadastros:" />
	</h3>
	<h:form>
		<h:panelGrid columns="3" cellpadding="2px">
			<h:outputText id="lnome" value="Nome:" />
			<h:inputText id="tnome" value="#{Participante.nome}" size="30"
				required="true" label="Nome" />
			<h:message for="tnome" style="color:red" />

			<h:outputText id="lsobrenome" value="Sobrenome:" />
			<h:inputText id="tsobrenome" value="#{Participante.sobrenome}"
				size="40" required="true" label="Sobrenome" />
			<h:message for="tsobrenome" style="color:red" />

			<h:outputText id="lcargo" value="Cargo" />
			<h:inputText id="tcargo" value="#{Participante.cargo}" size="25"
				required="true" label="Cargo" />
			<h:message for="tcargo" style="color:red" />

			<h:outputText id="lsalario" value="Salário" />
			<h:inputText id="tsalario" value="#{Participante.salario}"
				required="true" label="Salário" />
			<h:message for="tsalario" style="color:red" />

		</h:panelGrid>
		<br />
		<h:commandButton id="botao" action="#{Participante.Acao}"
			value="Enviar Dados" />
	</h:form>
</h:body>
</html>