Связь между Javascript и Java-апплетом - PullRequest
4 голосов
/ 02 сентября 2011

Я пытаюсь передать выбранное значение из раскрывающегося списка HTML методу апплета, используя метод сеттера в апплете.Но каждый раз, когда Javascript вызывается, он показывает «объект не поддерживает это свойство или метод» как исключение.

Мой код JavaScript:

function showSelected(value){
    alert("the value given from"+value);
    var diseasename=value;
    alert(diseasename);
    document.decisiontreeapplet.setDieasename(diseasename);

    alert("i am after value set ");
}

Код моего апплета:

package com.vaannila.utility;


import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;


import prefuse.util.ui.JPrefuseApplet;

public class dynamicTreeApplet extends JPrefuseApplet {

    private static final long serialVersionUID = 1L;
    public static int i = 1;
    public String dieasenameencode;
    //System.out.println("asjdjkhcd"+dieasenameencode);
    public void init() {
        System.out.println("asjdjkhcd"+dieasenameencode);
        System.out.println("the value of i is " + i);
        URL url = null;
        //String ashu=this.getParameter("dieasenmae");
        //System.out.println("the value of the dieases is "+ashu);

        //Here dieasesname is important to make the page refresh happen 

        //String dencode = dieasenameencode.trim();
        try {
            //String dieasename = URLEncoder.encode(dencode, "UTF-8");
            // i want this piece of the code to be called 
            url = new URL("http://localhost:8080/docRuleToolProtocol/appletRefreshAction.do?dieasename="+dieasenameencode);
            URLConnection con = url.openConnection();
            con.setDoOutput(true);
            con.setDoInput(true);
            con.setUseCaches(false);
            InputStream ois = con.getInputStream();
            this.setContentPane(dynamicView.demo(ois, "name"));
            ois.close();

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (FileNotFoundException f) {
            f.printStackTrace();

        } catch (IOException io) {
            io.printStackTrace();
        }
        ++i;
    }

    public void setDieasename(String message){
        System.out.println("atleast i am here and call is made ");
        this.dieasenameencode=message;
        System.out.println("the final value of the dieasenmae"+dieasenameencode);

    }

}

Мой код развертывания приложения:

<applet id="decisiontreeapplet" code="com.vaannila.utility.dynamicTreeApplet.class" archive="./appletjars/dynamictree.jar, ./appletjars/prefuse.jar" width ="1000" height="500" >    
</applet>

Ответы [ 4 ]

7 голосов
/ 02 сентября 2011

Измените ..

document.decisiontreeapplet

.. на ..

document.getElementById('decisiontreeapplet')

.. и, скорее всего, это будет работать.

EG

HTML

<html>
<body>
<script type='text/javascript'>
function callApplet() {
    msg = document.getElementById('input').value;
    applet = document.getElementById('output');
    applet.setMessage(msg);
}
</script>
<input id='input' type='text' size=20 onchange='callApplet()'>
<br>
<applet
    id='output'
    code='CallApplet'
    width=120
    height=20>
</applet>
</body>
</html>

Java

import javax.swing.*;

public class CallApplet extends JApplet {

    JTextField output;

    public void init() {
        output = new JTextField(20);
        add(output);
        validate();
    }

    public void setMessage(String message) {
        output.setText(message);
    }
}

Также рассмотрите возможность публикации краткого полного примера в следующий раз.Обратите внимание, что количество строк в двух источниках, показанных выше, короче, чем, например, у вашего апплета, и у меня ушло больше времени на подготовку источника, чтобы я мог проверить свой ответ.

1 голос
/ 02 сентября 2011

Попробуйте изменить параметр id в теге апплета на name .

<applet name="decisiontreeapplet" ...>
</applet>
0 голосов
/ 12 октября 2011

Я думаю, что тег устарел, и вместо него следует использовать тег . Я помню, что в теге объекта был некоторый логический параметр с именем scriptable .

Почему вы не используете инструментарий развертывания ? Это избавит вас от многих попыток - для получения дополнительной информации см. http://rostislav -matl.blogspot.com / 2011/10 / java-applets-building-with-maven.html .

0 голосов
/ 02 сентября 2011

Попробуйте передать параметры, используя тег param:

http://download.oracle.com/javase/tutorial/deployment/applet/param.html

...