Wicket: Füllen von Textarea via AJAX irgendwo auf der PAGE

Diskutiere Wicket: Füllen von Textarea via AJAX irgendwo auf der PAGE im Web Tier Forum; Beim Lernen von Wicket versuche ich eine simple Seite, dich bisher mit JSP und JavaScript erzeugt habe auf Wicket umzustellen. Auf der Seite habe...

  1. JunkerMartin
    JunkerMartin Neues Mitglied
    Beim Lernen von Wicket versuche ich eine simple Seite, dich bisher mit JSP und JavaScript erzeugt habe auf Wicket umzustellen. Auf der Seite habe ich beliebig viele Links die ein und dieselbe TextArea auf der Seite füllen. Bei der Benutzung von Wicket gelingt mit das aber nur mit der Klasse "Link" und nicht mit "AjaxFallbackLink".

    Die zugrunde gelegte HTML ist (hier vereinfacht auf einen Link):
    HTML:

    <html>
    <body>
        <a href="#" wicket:id="link">Fill Textarea</a>
        <div id="logarea">
            <textarea style="color: red; background-color: lightgray"
                wicket:id="textarea" name="text" cols="120" rows="25"></textarea>
        </div>
    </body>
    </html>
     
    Der Code für die Auflösung mit LINK ist:
    Code (Text):

    public class LINKpage extends WebPage {
        private TextArea textarea;
        private LINKpage homePage;
        private String log="Hallo";
        private int count=0;
        public LINKpage() {
            homePage=this;
           
            textarea = new TextArea("textarea", Model.of(String.format("%s\n%s",count, log)));
            add(textarea);
           
            add(new Link("link") {

                public void onClick() {
                    File logFile = new File("filename");
                    StringBuffer lineBuffer = new StringBuffer();
                    count++;
                    try {
                        BufferedReader br = new BufferedReader(new FileReader(logFile));
                        String line;
                        while ((line=br.readLine()) !=null ) {
                            lineBuffer.append(line+"\n");
                        }
                        log=lineBuffer.toString();
                    } catch (FileNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    textarea = new TextArea("textarea", Model.of(String.format("%s\n%s",count, log)));
                    homePage.replace(textarea);
                }
            });
        }
    }
     
    Meinen AJAX-Ansatz habe ich mal so geschrieben.
    Code (Text):

    public class SAXpage extends WebPage {
        private static final Logger LOGGER = LoggerFactory.getLogger(Tools.getClassName());
        private TextArea textarea;
        private SAXpage homePage;
        private String log="Hallo";
        private int count=0;
        public SAXpage() {
            homePage=this;
           
            add(new AjaxFallbackLink("link") {

                public void onClick(AjaxRequestTarget target) {
                    File logFile = new File("<filename>");
                    StringBuffer lineBuffer = new StringBuffer();
                    count++;
                    try {
                        BufferedReader br = new BufferedReader(new FileReader(logFile));
                        String line;
                        while ((line=br.readLine()) !=null ) {
                            lineBuffer.append(line+"\n");
                        }
                        log=lineBuffer.toString();
                        LOGGER.info("LOG={}", log);
                    } catch (FileNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    if (target != null) {
                        target.addComponent(textarea);
                    }
                }

            });
            textarea = new TextArea("textarea", new Model(String.format("%s\n%s",count, log)));
            textarea.setOutputMarkupId(true);
            add(textarea);

        }
    }
     
    Der Ajax-Ansatz ist dem Beispiel aus "Wicket in Action" (Seite 20) nachempfunden. Da das Beispiel dort für Wicket 1.3.7 gemacht wurde (unter 6.19.0 gibt es die Methode "addComponent()" für "AjaxRequestTarget" nicht mehr) - habe ich mein Programm mit beiden Wickets ausprobiert. Es funktioniert mit beiden Umgebungen nicht.

    Ich habe hier ein prinzipielles Verständnisproblem und wäre dankbar für erhellende Kommentare.
     
    Zuletzt bearbeitet: 4. Apr. 2015
  2. Vielleicht hilft dir das kostenlose Training weiter --> (hier klicken)
  3. JunkerMartin
    JunkerMartin Neues Mitglied
    Habe nun eine Lösung gefunden:
    Code (Text):

    public class SAXpage extends WebPage {
        private TextArea textarea;
        private SAXpage homePage;
        private String log="Hello";
        private int count=0;
        public SAXpage() {
            homePage=this;
           
            add(new AjaxFallbackLink("link") {

                public void onClick(AjaxRequestTarget target) {
                    File logFile = new File("<filename>");
                    StringBuffer lineBuffer = new StringBuffer();
                    count++;
                    try {
                        BufferedReader br = new BufferedReader(new FileReader(logFile));
                        String line;
                        while ((line=br.readLine()) !=null ) {
                            lineBuffer.append(line+"\n");
                        }
                        log=lineBuffer.toString();
                        LOGGER.info("LOG=\n{}", log);
                    } catch (FileNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    if (target != null) {
                        target.addComponent(textarea);
                    }
                }

            });
            textarea = new TextArea("textarea", new Model() {
                  @Override
                  public Object getObject() {
                    return String.format("%s\n%s",count, log);
                  }
            });
            textarea.setOutputMarkupId(true);
            add(textarea);
        }
     
    So richtig im Klaren bin ich mir dabei noch nicht wie das funktioniert: Anscheinend wird bei jedem Request das Model neu gerendert.
     
Die Seite wird geladen...

Wicket: Füllen von Textarea via AJAX irgendwo auf der PAGE - Ähnliche Themen

Apache Wicket problem
Apache Wicket problem im Forum Deployment
Wicket: Komponente und erzeugtes ModalWindow haben unterschiedliche Referenzen
Wicket: Komponente und erzeugtes ModalWindow haben unterschiedliche Referenzen im Forum Web Tier
Wicket: Pfad zu HTML Dateien ändern/erweitern
Wicket: Pfad zu HTML Dateien ändern/erweitern im Forum Web Tier
Wicket
Wicket im Forum Web Tier
Joda DateTime in Wicket
Joda DateTime in Wicket im Forum Web Tier
Thema: Wicket: Füllen von Textarea via AJAX irgendwo auf der PAGE