[Java] Link in popup weergeven

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • the_scientist
  • Registratie: November 2004
  • Laatst online: 15-11-2023
Hi guys,

Ik ben momenteel bezig met een Java-applicatie. Deze applicatie schrijft een .csv-bestand weg op de harde schijf van de server, nu is het nog de bedoeling dat dit bestand op de harde schijf van de client terecht komt. Om dit voor elkaar te boksen heb ik enkele mogelijkheden bedacht:

- Na wegschrijven komt er een save as-venster;
- Na wegschrijven wordt er een popup getoond met de link erin;
- Na wegschrijven wordt het bestand geopend en kan de gebruiker het bestand handmatig opslaan;
- Na wegschrijven wordt het bestand gemailed naar de gebruiker.

Laatste optie heeft niet mijn voorkeur, dus daar is nog niet naar gekeken. Met de andere drie ben ik al de hele dag aan het stoeien. Het makkelijkste lijkt mij een popup tonen met daarin een hyperlink, waarop een rechtermuisknop -> save as uit te voeren is. Dat bleek toch niet zo makkelijk. Ik kom niet verder dan onderstaande regel:

JOptionPane.showMessageDialog(null, "<html><a href=http://www.google.nl>klik</a></html>");

Er wordt wel een popup getoond met daarin een mooi blauw woordje "klik", maar met de linkermuisknop klikken is al onmogelijk, laat staan met rechts. Het is weliswaar geen .csv maar dat maakt in dit geval natuurlijk niet uit.

Wat zou nou een makkelijke oplossing zijn voor mijn probleem, en heeft er iemand bruikbare tips om me op weg te helpen?

Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-08 02:59

Gerco

Professional Newbie

Als je Java code kan uitvoeren op de client (wat je blijkbaar kan, want je gebruikt een JOptionPane), waarom schrijf je dat bestand dan niet gewoon weg op de client? Desnoods maak je een getFile() method op je server die de client kan aanroepen om de content van de file op te halen als je het wegschrijven op de server niet kan laten.

Of je probleem is erg simpel en je hebt eigenlijk helemaal geen probleem of ik snap je probleem niet en misschien moet je het beter uitleggen. Bij voorkeur door te vermelden wat voor applicatie je maakt (Swing/Web) en op welke manier je client met de server communiceert (JMS, HTTP, RMI, etc?).

[ Voor 3% gewijzigd door Gerco op 28-04-2009 01:58 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 19-09 10:19
Als ik even niet afvraag waar je het voor wilt gebruiken dan zou je met zoeken zoiets als dit tegen kunnen komen:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package openbrowser;
import java.awt.Desktop;
import java.net.URI;

public class Main {

    public static void main(String[] args) {
        URI uri = URI.create("http://www.tweakers.net");
        try
        {
            Desktop.getDesktop().browse(uri);
        }
        catch(Exception e)
        {
            System.out.println("Error opening browser");
            System.out.println(e.getMessage());
        }        
    }
}


(Hoewel ik moet toegeven dat zelfs met "how to open a webpage in java" als search string ik heeel erg veel niet werkende en slechte voorbeelden kreeg (ook veel zelf geschreven code terwijl dit gewoon in java6' api zit.))

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • bomberboy
  • Registratie: Mei 2007
  • Laatst online: 18:26

bomberboy

BOEM!

Je kan daar ongeveer de techniek voor gebruiken die vroeger bij die hatelijke java applet-menus werd gebruikt en dat gaat ongeveer zo: http://www.roseindia.net/...-URL-from-an-Applet.shtml

@Gerco: Het gaat om een java applet vermoed ik, en die draait in een sandbox die helemaal niet aan je lokale PC kan. (tenzij je met allerlei certificaten begint te spelen en de gebruiker expliciet toestemming laat geven etc. Maar meestal wil je dat niet.)

Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
bomberboy schreef op dinsdag 28 april 2009 @ 08:11:
@Gerco: Het gaat om een java applet vermoed ik, en die draait in een sandbox die helemaal niet aan je lokale PC kan. (tenzij je met allerlei certificaten begint te spelen en de gebruiker expliciet toestemming laat geven etc. Maar meestal wil je dat niet.)
Hij heeft het specifiek over een Java-applicatie. Daarnaast is het ook niet zondermeer mogelijk via een applet rechtstreeks bestanden op een server te schrijven.

Voor zover ik weet is HTML support in Swing components vooral bedoeld om makkelijk 'mooi' informatie weer te kunnen geven. Links e.d. worden volgens mij niet gesupport. Wat dat betreft is het dus zaak een button te maken met een "klik hier om het bestand te openen/saven" ofzo, en hoe je dat dan precies afhandelt moet je zelf weten. Ik vind een save-as dialog het meest 'nette'.

https://niels.nu


Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
Als het een Java applicatie is (en geen applet), dan zou je kunnen kijken naar http://java.sun.com/javase/6/docs/api/java/awt/Desktop.html

Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 19-09 10:19
Remus schreef op dinsdag 28 april 2009 @ 11:43:
Als het een Java applicatie is (en geen applet), dan zou je kunnen kijken naar http://java.sun.com/javase/6/docs/api/java/awt/Desktop.html
:z
roy-t schreef op dinsdag 28 april 2009 @ 08:07:
[code=JAVA]
import java.awt.Desktop;
[...]

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
Uhm... laten we het maar houden op een 'not enough coffee'-error of zo ;(

Acties:
  • 0 Henk 'm!

  • the_scientist
  • Registratie: November 2004
  • Laatst online: 15-11-2023
Gerco schreef op dinsdag 28 april 2009 @ 01:58:
Als je Java code kan uitvoeren op de client (wat je blijkbaar kan, want je gebruikt een JOptionPane), waarom schrijf je dat bestand dan niet gewoon weg op de client? Desnoods maak je een getFile() method op je server die de client kan aanroepen om de content van de file op te halen als je het wegschrijven op de server niet kan laten.

Of je probleem is erg simpel en je hebt eigenlijk helemaal geen probleem of ik snap je probleem niet en misschien moet je het beter uitleggen. Bij voorkeur door te vermelden wat voor applicatie je maakt (Swing/Web) en op welke manier je client met de server communiceert (JMS, HTTP, RMI, etc?).
Ik begrijp je vraag. Voor de applicatie is gebruik gemaakt van de Google Web Toolkit. Een beperking van deze toolkit is dat bepaalde Java-klassen niet aan de client-kant gebruikt mogen worden, waaronder de FileWriter. Het wegschrijven van de .csv moet dus aan de serverkant gebeuren. Kwamen we aan bij het volgende probleem: vanuit de client-kant kunnen functies aan de serverkant niet direct aangeroepen worden. Om dit toch te kunnen is er gebruik gemaakt van AJAX-callbacks. Dat deel werkt nu allemaal, alleen wordt de .csv nu opgeslagen op de serverkant en moet er iets geregeld worden dat de gebruiker erbij kan. Ik laat de .csv nu wegschrijven in de Tomcat-directory, en wanneer ik het pad handmatig invoer in de client kan ik er gewoon bij. Echter, nu moet er nog een manier worden gevonden dat de gebruiker het pad gepresenteerd krijgt. En dan bedoel ik geen ellenlange syntax maar gewoon een mooi linkje in de trand van "klik hier". Het script van Roy-T werkt, enige probleem is dat de .csv getoond wordt in de browser, en Excel dus niet wordt geopend. Graag hoor ik nog andere suggesties :)

Edit: voor diegenen die de applicatie willen zien, klik hier, gaat om het export-deel.

[ Voor 6% gewijzigd door the_scientist op 28-04-2009 13:36 ]


Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
the_scientist schreef op dinsdag 28 april 2009 @ 12:55:
[...]
Het script van Roy-T werkt, enige probleem is dat de .csv getoond wordt in de browser, en Excel dus niet wordt geopend. Graag hoor ik nog andere suggesties :)
Never mind, heeft zelfde effect als je een URL gebruikt

[ Voor 24% gewijzigd door Remus op 28-04-2009 15:06 . Reden: Werkt toch niet ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Och GWT. En het leek je niet nodig om dergelijke 'marginale' informatie in je topicstart te noemen? Je vorige GWT topic liep ook al volledig doelloos uit de hand omdat je dit stukje informatie 'vergeette te vermelden'.

Maar goed, kijken we naar het stukje werkelijke probleem:
Echter, nu moet er nog een manier worden gevonden dat de gebruiker het pad gepresenteerd krijgt. En dan bedoel ik geen ellenlange syntax maar gewoon een mooi linkje in de trand van "klik hier".
ellenlange syntax? Wat voor ellenlange syntax?
Het script van Roy-T werkt, enige probleem is dat de .csv getoond wordt in de browser, en Excel dus niet wordt geopend. Graag hoor ik nog andere suggesties :)
Standaard functionaliteit van de browser. Veel over te vinden. Google zoekwoord is 'content-type'.


Wat ik me trouwens afvraag. Heb je wel rekening gehouden met:
1 - dat meerdere mensen tegelijk een csv bestand op de server zouden kunnen zetten
2 - dat sommige mensen helemaal niet willen dat anderen bij hun csv bestand kunnen
3 - dat het security technisch gezien een behoorlijk risico is wanneer een clientside proces bestanden in de tomcat directory kan plaatsen
4 - dat het misschien rechten technisch wel helemaal niet mogelijk is om bestanden in de tomcat directory te schrijven.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • the_scientist
  • Registratie: November 2004
  • Laatst online: 15-11-2023
Janoz schreef op dinsdag 28 april 2009 @ 15:21:
Och GWT. En het leek je niet nodig om dergelijke 'marginale' informatie in je topicstart te noemen? Je vorige GWT topic liep ook al volledig doelloos uit de hand omdat je dit stukje informatie 'vergeette te vermelden'.

Maar goed, kijken we naar het stukje werkelijke probleem:

[...]

ellenlange syntax? Wat voor ellenlange syntax?


[...]

Standaard functionaliteit van de browser. Veel over te vinden. Google zoekwoord is 'content-type'.


Wat ik me trouwens afvraag. Heb je wel rekening gehouden met:
1 - dat meerdere mensen tegelijk een csv bestand op de server zouden kunnen zetten
2 - dat sommige mensen helemaal niet willen dat anderen bij hun csv bestand kunnen
3 - dat het security technisch gezien een behoorlijk risico is wanneer een clientside proces bestanden in de tomcat directory kan plaatsen
4 - dat het misschien rechten technisch wel helemaal niet mogelijk is om bestanden in de tomcat directory te schrijven.
Ten eerste heeft de GWT er in dit geval weinig mee te maken, dit was meer een antwoord op waarom het wegschrijven niet aan de clientside gebeurd. Ten tweede: Doelloos uit de hand... Overdrijven is ook een vak zeg...

Voor wat betreft de ellenlange syntax:
Echter, nu moet er nog een manier worden gevonden dat de gebruiker het pad gepresenteerd krijgt. En dan bedoel ik geen ellenlange syntax maar gewoon een mooi linkje in de trand van "klik hier".
Daar bedoel ik mee dat het pad niet gepresenteerd wordt in de vorm van "http://server/applicatiemap/test.csv" zoals ik nu voor elkaar heb gekregen (niet clickable) maar in de vorm van een clickable "klik hier" linkje. Duidelijk zo?

Voor wat betreft je punten: 1 & 2 zal voorlopig niet gebeuren, er is maar één persoon die met de applicatie werkt. 3 is niet ons probleem, beveiliging valt buiten de scope. Punt 4 is mogelijk zoals wij het opleveren en waar de opdrachtgever mee akkoord is.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

the_scientist schreef op dinsdag 28 april 2009 @ 15:42:
[...]


Ten eerste heeft de GWT er in dit geval weinig mee te maken, dit was meer een antwoord op waarom het wegschrijven niet aan de clientside gebeurd. Ten tweede: Doelloos uit de hand... Overdrijven is ook een vak zeg...
GWT heeft er alles mee te maken. GWT legt de beperkingen op mbt het saven naar de client, bied de mogelijkheid tot het saven naar de server enz enz. Daarnaast zoek je een GWT widget om een linkje in te zetten.

Met je vorige topic bedoelde ik \[ Java ] FileWriter geeft problemen tijdens compilen. Daar vond je het ook niet nodig om te vermelden dat het om GWT ging, zelfs niet toen iemand het maar ging gokken. En dat terwijl dat cruciale informatie was om het probleem op te kunnen lossen.
Voor wat betreft de ellenlange syntax:


[...]


Daar bedoel ik mee dat het pad niet gepresenteerd wordt in de vorm van "http://server/applicatiemap/test.csv" zoals ik nu voor elkaar heb gekregen (niet clickable) maar in de vorm van een clickable "klik hier" linkje. Duidelijk zo?
Ah, ok... Wat je eigenlijk wilt zeggen is dat je niet de url wilt tonen, maar er een link van wil maken. Zeg dat dan meteen. Bij syntax denk ik over het algemeen aan een stukje programma code.
Voor wat betreft je punten: 1 & 2 zal voorlopig niet gebeuren, er is maar één persoon die met de applicatie werkt.
3 is niet ons probleem, beveiliging valt buiten de scope. Punt 4 is mogelijk zoals wij het opleveren en waar de opdrachtgever mee akkoord is.
Laat ik maar zeggen dat ik er dan blijkbaar een wat professioneler instelling op na houdt en liever goede software oplever dan the bear minimum the client asks.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
BTW: Waarom genereer je die file niet gewoon op de server en push je die niet gewoon naar de browser, dan kan de gebruiker hem lokaal opslaan of openen. Het lijkt mij dat dat gewoon mogelijk is met GWT.

Acties:
  • 0 Henk 'm!

  • the_scientist
  • Registratie: November 2004
  • Laatst online: 15-11-2023
Klinkt interessant, maar hoe?

Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
Ik heb geen enkele ervaring met GWT (afgezien van een tutorialtje een paar jaar geleden), maar dit lijkt mij een mogelijk manier: http://markmail.org/messa...xzb3mbdapvb+state:results

Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 19-09 10:19
the_scientist schreef op dinsdag 28 april 2009 @ 15:42:
[...]


Ten eerste heeft de GWT er in dit geval weinig mee te maken, dit was meer een antwoord op waarom het wegschrijven niet aan de clientside gebeurd. Ten tweede: Doelloos uit de hand... Overdrijven is ook een vak zeg...
Sorry hoor maar alle replies tot nu toe met oplossingen werken niet omdat we niet wisten dat het om GWT ging, nu we weten dat het om GWT gaat zijn de eerste 3 replies daarover meteen gevuld met wel goede antwoorden, we zijn niet telepatisch hier hoor! (Hoewel dat wel handig zou zijn als programmeur :P )

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • the_scientist
  • Registratie: November 2004
  • Laatst online: 15-11-2023
Oke, mijn excuus bij deze.
Pagina: 1