Applet, získávání dat z formuláře – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Applet, získávání dat z formuláře – Java – Fórum – Programujte.comApplet, získávání dat z formuláře – Java – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Winsik
~ Anonymní uživatel
5 příspěvků
5. 1. 2012   #1
-
0
-

Ahoj,

řeším problém s jedním starším projektem. Jedná se o Applet, který podepisuje a šifruje data. S vnějším světem komunikuje prostřednictvím formuláře v html stránce, odkud bere z formulářového prvku vstupní data. Část starající se o získání dat je následující:

JSObject browserWindow = JSObject.getWindow(signerApplet);

JSObject inputField = (JSObject) browserWindow.eval("document.getElementById('" + getDataInputField() + "')");

String data = (String) inputField.getMember("value");

Toto řešení funguje bez problémů, dokud vstupní data nejsou příliš velká. v Případě větší velikosti, cca 10mb vrátí metoda getMember pouze null, bez jakékoli výjimky, chyby v konzoli, nebo známky toho co by mohlo být špatně. Už několik dní hledám řešení ale marně. Zkoušel jsem navýšit velikost paměti v nastavení control panelu, pomocí.

Řešili jste někdo takovýto problém s JSObject? Případně jakým způsobem byste získávali větší množství dat z html formuláře do appletu?

Předem díky za odpověď
Winsik

Nahlásit jako SPAM
IP: 62.84.131.–
Reklama
Reklama
zlz
~ Anonymní uživatel
634 příspěvků
6. 1. 2012   #2
-
0
-

Načti to po částech. Nejspíš to půjde udělat nějak lépe, já jsem zkusil toto:

		String data = "";
		int length = (Integer) inputField.eval("this.value.length");
		for (int pos = 0; pos < length; pos += 1024*1024) {
			data += (String) inputField.eval("this.value.substr(" + pos + ",1024*1024)");
		}
Nahlásit jako SPAM
IP: 213.211.51.–
winsik
~ Anonymní uživatel
5 příspěvků
9. 1. 2012   #3
-
0
-

#2 zlz

Díky za tip, nevěděl jsem, že výsledkem eval může být i jen String.

Během dneška vyzkouším a přidám a případně i přidám své řešení

Nahlásit jako SPAM
IP: 62.84.131.–
winsik
~ Anonymní uživatel
5 příspěvků
12. 1. 2012   #4
-
0
-

Tak konstrukce s this volaná na získaném elementu mi nefunguje, musím vždy uvést identifikátor.

udělal jsem to takto:

JSObject browserWindow = JSObject.getWindow(signerApplet);     
String ident = "document.getElementById('" + getDataInputField(index) + "')";     

int length = (Integer) browserWindow.eval(ident + ".value.length");     
     
for (int pos = 0; pos < length; pos += 1024*1024) {
  data += (String) browserWindow.eval(ident + ".value.substr(" + pos + ",1024*1024)");
}           
     
return Base64Utils.base64Decode(data);
 

Problém mám s řádkem:

int length = (Integer) browserWindow.eval(ident + ".value.length");

Při určité velikosti se začne jednat nikoli o integer ale o double a dostávám ClassCastException, jasně, můžu si to zjistit pomocí instanceof, ale přijde mi to jako divné chování a nevím, jestli tím tento problém zcela vyřeším.

if (lengthJSObject instanceof Integer) {
        length = (Integer) lengthJSObject;
      }else if(lengthJSObject instanceof Double){
        length = ((Double) lengthJSObject).longValue();
      }else{
        throw new ClassCastException("Velikost, vrácená z javascriptu");
      }

Jakou by to mohlo mít příčinu?

Nahlásit jako SPAM
IP: 62.84.131.–
zlz
~ Anonymní uživatel
634 příspěvků
12. 1. 2012   #5
-
0
-

V JS se často používá double i pro celá čísla nepřekračující rozsah intu. Asi to bude tím.

A "číselné třídy" v Javě mají společnou "nadtřídu" Number, můžeš to přetypovat na ni.

Nahlásit jako SPAM
IP: 213.211.51.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 33 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý