StringTokenizer

5 respostas
P

Olá, estou tentando utilizar a função StringTokenizer e não estou conseguindo…

Quando vou fazer um cadastro de funcionário, onde tenho que colocar os papeis deles na empresa (por exemplo: Engenheiro, Analista, Gerente)sempre podendo atribuir mais de um papel para apenas um funcionário, eu não consigo pegar todos os papeis que ele pode ser.

Estou usando uma lista onde vou escolhendo os papeis do funcionário e jogando dentro de outra lista e quando vou passar para a página de cadastro do banco de dados eu não consigo :frowning:

Vou encaminhar minhas páginas:

A primeira é cadfunc01.jsp e não apresenta problemas.

<%@ page import="beans.exemplos.*"%>
<%@ page import="java.sql.*"%>

<jsp:useBean id="conect" class="beans.exemplos.Conexao">
  <jsp:setProperty name="conect" property="*"/>
</jsp:useBean>

<%!
	Connection conexao = null;
	PreparedStatement sql = null;
	ResultSet resultado = null;
	ResultSet r_papel = null;
	ResultSet r_nivel = null;
	ResultSet r_turno = null;
%>

<%
		conexao = conect.conectar();				
		sql = conexao.prepareStatement("SELECT * FROM papeis");
		r_papel = sql.executeQuery();
		sql = conexao.prepareStatement("SELECT * FROM nivel");
		r_nivel = sql.executeQuery();
		sql = conexao.prepareStatement("SELECT * FROM turnos");
		r_turno = sql.executeQuery();
		
%>


<html>
<head>
<title>Cadastro de Funcionários</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript">
function trocaItem(origem,destino){
	if (origem.value == 0){
		alert('Escolha uma opção!');
	}
	else{		
		if (destino.options[0].value == 0) {
			destino.options[0] = null;
		}
		u = destino.options.length;
		destino.options[u]=new Option(origem.options[origem.selectedIndex].text,origem.options[origem.selectedIndex].value);
		origem.options[origem.selectedIndex]=null;

		y = destino.options.length;
		var empresas = new Array();
		var aux; 
		for (var x=0; x < y; x++){
			empresas[x] = destino.options[x].text + '|' + destino.options[x].value;
		}
		ordenado = empresas.sort();
		while (destino.options.length){
			destino.options.remove(0);
		}
		destino.selectedIndex = 0;
		var s = ordenado.length;
		for (var x=0; x < s; x++){
			aux = ordenado[x].split("|");
			destino.options[x]= new Option(aux[0],aux[1]);
		}
	}
	if (origem.length == 0) {
		origem.options[0] = new Option('Nenhuma opção',0);
	}
}
</script>
<script language="JavaScript">
<!--
function confirma() {
    resp = confirm('Enviar formulário?');
	if (resp == true)
	{ 
	   var len = document.cadastro.tfuncoes.length;
	   var str = '';
   	   for(var i=0; i<len; i++) {	   
         str += document.cadastro.tfuncoes.options[i].value + ',';
       }
       str = str.substring(0,str.length-1);
       document.cadastro.strfuncoes.value = str; //strfuncoes recebe todos os papeis
	   document.cadastro.submit();
	}
	else 
	{ return };
}
//-->
</script>
</head>

<body leftmargin="0" topmargin="0">
<table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td height="318" align="center" valign="middle">
	<form action="cadfunc02.jsp" method="post" name="cadastro" id="cadastro">
	    <input type="Hidden" name="strfuncoes">
    <table width="413" border="0" cellpadding="0" cellspacing="2" bgcolor="#666666">
      <tr>
        <td width="409" height="25" align="center"><font color="#FFFFFF" size="2" face="Verdana"><strong>Cadastro de Funcionários</strong></font></td>
      </tr>
      <tr>
        <td height="200"><table width="100%" height="209" border="0" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC">
          <tr>
            <td width="44" align="right"><font size="2" face="Verdana">Nome:</font></td>
            <td colspan="4"><input name="func_nome" type="text" id="func_nome" size="55"></td>
            </tr>
          <tr>
            <td height="30" align="right">ID:</td>
            <td width="60" colspan="2"><input name="id" type="text" id="id" size="10"></td>
            <td width="46"><div align="right">Senha:</div></td>
            <td width="135"><input name="senha" type="password" id="senha" size="10"></td>
          </tr>
          <tr>
            <td height="30" align="right"><font size="2" face="Verdana">Turno:</font></td>
            <td colspan="3"><font size="2" face="Verdana">
			<select name="codturno" size="1" id="codturno">
			  <% while (r_turno.next()) { %>
			  <% String desc_turno = r_turno.getString("descricao"); %>
			  <% int cod_turno = r_turno.getInt("codturno"); %>
                <option value="<%= cod_turno %>"><%= desc_turno %></option>
				<% } %>
             </select>
</font><font size="2" face="Verdana"> 
              
            </font></td>
            <td><font size="2" face="Verdana">
              <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" width="100" height="22">
                <param name="BGCOLOR" value="">
                <param name="movie" value="Bturno.swf">
                <param name="quality" value="high">
                <param name="base" value=".">
                <embed src="Bturno.swf" base="."  quality="high" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="100" height="22" ></embed>
              </object>
            </font></td>
          </tr>
          <tr>
            <td height="61" align="right"><font size="2" face="Verdana">Papel:</font></td>
            <td><font size="2" face="Verdana">			                  
              <select name="codpapel" size="4" multiple class="inputBox">
			  <% while (r_papel.next()) { %>
			  <% String papel = r_papel.getString("descricao"); %>
			  <% int cod_papel = r_papel.getInt("codpapel"); %>
                <option value="<%= cod_papel %>"><%= papel %></option>
				<% } %>
              </select>
</font><font size="2" face="Verdana"> 
              
            </font></td>
            <td align="center">
              <table>
                <tr>
                  <td width="24"><input type="button" value="»" onclick="trocaItem(document.cadastro.codpapel,document.cadastro.tfuncoes);" class="inputBox">
                  </td>
                </tr>
                <tr>
                  <td><input type="button" value="«" onclick="trocaItem(document.cadastro.tfuncoes,document.cadastro.codpapel);" class="inputBox">
                  </td>
                </tr>
              </table>
            </td>
            <td align="left"><select name="tfuncoes" size="4" class="inputBox">
                <option value="0">Nenhum cargo escolhido</option>
              </select>
              </td>
            <td><font size="2" face="Verdana">
              <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" width="100" height="22" align="absbottom">
                <param name="BGCOLOR" value="">
                <param name="movie" value="Bnovo_papel.swf">
                <param name="quality" value="high">
                <param name="base" value=".">
                <embed src="Bnovo_papel.swf" width="100" height="22" align="absbottom" base="."  quality="high" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" ></embed>
              </object>
            </font></td>
          </tr>
          <tr>
            <td align="right"><font size="2" face="Verdana">Nível:</font></td>
            <td colspan="3"><font size="2" face="Verdana">
                <select name="codnivel" size="1" id="codnivel">
                  <% while (r_nivel.next()) { %>
                  <% String desc_nivel = r_nivel.getString("descricao"); %>
				  <% int cod_nivel = r_nivel.getInt("codnivel"); %>
                  <option value="<%= cod_nivel %>"><%= desc_nivel %></option>
                  <% } %>
                </select>
            </font><font size="2" face="Verdana"> 
              
            </font></td>
            <td><font size="2" face="Verdana">
              <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" width="100" height="22" align="absbottom">
                <param name="BGCOLOR" value="">
                <param name="movie" value="Bnovo_nivel.swf">
                <param name="quality" value="high">
                <embed src="Bnovo_nivel.swf" width="100" height="22" align="absbottom" quality="high" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" ></embed>
              </object>
            </font></td>
          </tr>
          <tr>
            <td height="30" colspan="5" align="center"><input type="button" name="Cadastrar" value="Cadastrar" onClick="javascript:confirma();">
                <input type="reset" name="Cancelar" value="Cancelar">
            </td></tr>
        </table></td>
      </tr>
    </table>
    </form></td>
  </tr>
</table>
<% conexao.close(); %>
</body>
</html>

Porém a segunda página: cadfunc02.jsp dá erro

<%@ page import="beans.exemplos.*"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.awt.*" %>


<jsp:useBean id="func" class="beans.exemplos.Funcionario">
  <jsp:setProperty name="func" property="*"/>
</jsp:useBean>

<jsp:useBean id="tur" class="beans.exemplos.Turno">
  <jsp:setProperty name="tur" property="*"/>
</jsp:useBean>

<jsp:useBean id="pap" class="beans.exemplos.Papel">
  <jsp:setProperty name="pap" property="*"/>
</jsp:useBean>

<jsp:useBean id="niv" class="beans.exemplos.Nivel">
  <jsp:setProperty name="niv" property="*"/>
</jsp:useBean>

<jsp:useBean id="conect" class="beans.exemplos.Conexao">
  <jsp:setProperty name="conect" property="*"/>
</jsp:useBean>

<%!
	Connection conexao = null;
	PreparedStatement sql = null;
	ResultSet resultado = null;
	String func_nome = null;
	String id = null;
	String senha = null;
	String strfuncoes = null;
	String papel[];
	int codnivel = 0;
	int codfunc = 0;
	int codpapel = 0;
	int codturno = 0;
	int er = 0;;
	int cont_token = 0;
%>
<%
		//Class.forName("org.gjt.mm.mysql.Driver").newInstance();
		//conexao = DriverManager.getConnection("jdbc:mysql://localhost/wes");
		conexao = conect.conectar();
		codfunc = func.getCodfunc();
		func_nome = func.getFunc_nome();
		id = func.getId();
		senha = func.getSenha();
		codnivel = niv.getCodnivel();
		strfuncoes = pap.getStrfuncoes();// variavel que contém os papeis escolhidos
		codturno = tur.getCodturno();
		String stringToTokenize = strfuncoes; 
		StringTokenizer	tokens = new StringTokenizer (stringToTokenize);
		cont_token = tokens.countTokens();
		int i = 1;
		while (tokens.hasMoreTokens()){ //separação da String em tokens para pegar os códigos dos papeis do funcionário
			papel[i] = tokens.nextToken();
			i = i+1;
		}
		if (func_nome != null & id != null & senha != null){
			sql = conexao.prepareStatement("SELECT func_nome FROM funcionarios WHERE func_nome = '"+ func_nome +"'");
			resultado = sql.executeQuery();
			if (resultado.next()) {
				er = 1;
		  	} else {
		  		sql = conexao.prepareStatement("INSERT INTO funcionarios (func_nome,id,senha,codnivel) VALUES('"+ func_nome +"','"+ id +"','"+ senha +"','"+ codnivel +"')");
		  		int inserir = sql.executeUpdate();
		  		sql = conexao.prepareStatement("SELECT codfunc FROM funcionarios WHERE func_nome = '"+ func_nome +"'");
		  		resultado = sql.executeQuery();
		  		if (resultado.next()) {
		  			codfunc = resultado.getInt("codfunc");
		  		}
		  		//sql = conexao.prepareStatement("INSERT INTO papeis_funcionario VALUES('"+ codpapel +"','"+ codfunc +"')");
		  		//int inserir2 = sql.executeUpdate();
		  		sql = conexao.prepareStatement("INSERT INTO turno_funcionario VALUES('"+ codfunc +"','"+ codturno +"')");
		  		int inserir3 = sql.executeUpdate();
				er = 0;
			}
		} else {
			er = 2;
		}
		sql = conexao.prepareStatement("SELECT func_nome FROM funcionarios where func_nome = '"+ func_nome +"'");
		resultado = sql.executeQuery();
%>

<html>
  <head>
  <title>Cadastro de Funcionário</title>
    
  </head>
  <body>
  	<%// for (int j=0; j < cont_token; j++) {%>
		<%= //papel[j]%>
	<%//}%>
	<% if (er == 1) {%>
		Funcionário: <%= func_nome%> já cadastrado.
	<%}%>
	<% if (er == 2) {%>
		Os campos não podem estar vazios.
	<%} else { %>
		<% if (resultado.next()) {%>
			Funcionário: <%= codfunc %>, <%= func_nome %> cadastrado com sucesso.
		<%}%>
	<%}%>
	<% conexao.close(); %>
  </body>
</html>

O erro é o seguinte:

org.apache.jasper.JasperException: Unable to compile class for JSP

An error occurred at line: -1 in the jsp file: null

Generated servlet error:

[javac] Since fork is true, ignoring compiler setting.

[javac] Compiling 1 source file

[javac] Since fork is true, ignoring compiler setting.

[javac] C:Tomcat 4.1workStandalonelocalhostwesjspcadfunc02_jsp.java:211: ) expected

[javac]       out.write("

“);

[javac]                          ^

[javac] C:Tomcat 4.1workStandalonelocalhostwesjspcadfunc02_jsp.java:211: ‘void’ type not allowed here

[javac]       out.write(”

");

[javac]                ^

[javac] 2 errors

5 Respostas

C

Pelo visto vc está usando o caractere ‘,’ ( virgula ) para separar os tokens. Se isso é verdade vc está usando o constructor errado de StringTokenizer. Vc deve usar o constructor que recebe o separador de tokens que o string a ser quebrado contem. Neste caso o uso seria assim :
StringTokenizer tokens =
new StringTokenizer (stringToTokenize,",");
E é sempre bom falar :
Não escreva código Java dentro de suas JSPs, é um anti-pattern terrível.

Shelson

pessoal,
pegando o gancho, alguem pode me explicar o q eh StringTokenizer e/ou me indicar algum link sobre ?

Rafael_Steil

Serve para voce separar alguma string em partes, com base em um caracter… por exemplo

esta,eh,uma,frase

se vc usar virgula como separador, ira pegar como resultado

esta
eh
uma
frase

o metodo split(string) da classe String faz a mesma coisa, de uma maneira bem mais simles e rapida.

Mais info vc consegue na API.

Rafael

marciolx

“Shelson”:
pessoal,
pegando o gancho, alguem pode me explicar o q eh StringTokenizer e/ou me indicar algum link sobre ?

aqui tem exemplos de como usá-la:

http://www.javaalmanac.com/cgi-bin/search/find.pl?words=stringtokenizer

P

“CLAUDIO GUALBERTO”:
Pelo visto vc está usando o caractere ‘,’ ( virgula ) para separar os tokens. Se isso é verdade vc está usando o constructor errado de StringTokenizer. Vc deve usar o constructor que recebe o separador de tokens que o string a ser quebrado contem. Neste caso o uso seria assim :
StringTokenizer tokens =
new StringTokenizer (stringToTokenize,",");
E é sempre bom falar :
Não escreva código Java dentro de suas JSPs, é um anti-pattern terrível.

Valeu mais uma vez pela atenção Galera … Eu usei a estrutura que o Claudio me passou e agora deu certo.

Criado 6 de novembro de 2003
Ultima resposta 7 de nov. de 2003
Respostas 5
Participantes 5