Passando valores para o HTML com JSObject
Um applet não acessa, por padrão, um objeto do container onde ele está inserido. Para suprir essa deficiência (na verdade é uma característica do applet) a Netscape criou a classe JSObject, pertencente ao pacote (package) netscape.javascript.
Essa classe deriva diretamente de java.lang.Object e sua declaração é:
public final class JSObject
extends Object
Os principais métodos da classe são:
- call(String, Object[]) - executa um método JavaScript;
- eval(String) - avalia uma expressão JavaScript;
- finalize() - remove a referência do objeto no objeto JavaScript correspondente;
- getMember(String) - retorna um objeto do JavaScript, acessado pelo nome. É equivalente ao this.name;
- getSlot(int) - retorna um objeto do JavaScript, acessado pelo índice. É equivalente ao this[index];
- removeMember(String) - remove um objeto do JavaScript, acessado pelo nome;
- setMember(String, Object) - Atribui um valor a um objeto do JavaScript, acessado pelo nome. Equivale ao this.name = value;
- setSlot(int, Object) - Atribui um valor a um objeto do JavaScript, acessado pelo índice. Equivale ao this[index] = value;
- toString() - retorna a representação do objeto em forma de String.
O pacote netscape.javascript é instalado juntamente com o Java SE e está no arquivo plugin.jar.
Algumas observações devem ser feitas quando usamos essa classe:
Se estamos editando o programa num editor de textos simples e compilando com javac, precisamos incluir o caminho das classes na variável de ambiente CLASSPATH.
EXEMPLO: conteúdo de CLASSPATH - .;C:\Sun\SDK\jdk\jre\lib\plugin.jar
Se estamos editando o programa numa IDE, como o NetBeans, precisamos fazer uma referência ao arquivo, usando Library >>> Add jar or file da janela Project.
Para acessar a partir de um applet um objeto que está no HTML usamos o código abaixo:
...
JSObject campoDoFormularioHTML = new JSObject();
// cria um objeto JSObjectJSObject objWin = JSObject.getWindow(this);
// obtém uma referência para o objeto window do JavaScriptJSObject objDoc = (JSObject)objWin.getMember("document");
// obtém uma referência para o objeto document, pertencente ao windowJSObject objForms = (JSObject)objDoc.getMember("forms");
// obtém uma referência para a coleção de formulários do documentJSObject objForm = (JSObject)objForms.getMember("nomeForm");
// obtém uma referência para um formulário chamado nomeForm,
// que está na coleção formsJSObject objElements = (JSObject)objForm.getMember("elements");
// obtém uma referência para a coleção de elementos (campos) do formuláriocampoDoFormularioHTML = (JSObject)objElements.getMember("nomeCampo");
// obtém uma referência para um elemento chamado nomeCampo
// que está na coleção elementscampoDoFormularioHTML.setMember("value", "agnaldo");
// atribui o valor agnaldo para o membro (propriedade) value do objeto elemento
...
Se quiser saber mais sobre o Document Object Model (modelo de objetos) clique aqui para fazer download de uma apostila de JavaScript que escrevi em 2000/2001.