如何在JSF页面中执行Java Swing代码 [英] How to execute Java Swing code in a JSF page

查看:128
本文介绍了如何在JSF页面中执行Java Swing代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,我是JSF的新手,

Hi all i'm new to JSF,

我已经创建了一个Java文件,当用户按下XHTML页面上的按钮时,我需要运行该文件,我该怎么做?对于像我这样的初学者来说,还有针对JSF的好的教程吗?谢谢:)

I have created a java file, I need this to run when a user presses a button on the XHTML page, how do i do this ? also are there any good tutorials for beginners like me out there for JSF ? Thanks :)

JAVA代码是一段简单的代码,它允许用户选择一个txt文件,然后进行打印.

The JAVA code is a simple piece of code that allows a user to select a txt file and then print it.

目标是创建一个允许打印文档的网络应用程序

The aim is to create a web app to allow printing of documents

这是我希望运行的JAVA代码:

Here is the JAVA code I wish to run:

import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
import java.awt.print.*;
import java.text.*;
import java.io.*;
import javax.swing.*;
import java.util.List;
import java.util.ArrayList;

public class PrintText implements Printable {

    private String text; // Constructor argument for AttributedString.

    // Below the code will allow the user to select a file and then print out the contents of the file
    public static void main(String[] args) throws IOException {
        new PrintText();
    }

    public PrintText() {
        EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    try {
                        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    }

                    //selects the file
                    JFileChooser chooser = new JFileChooser();
                    chooser.showOpenDialog(null);
                    File file = chooser.getSelectedFile();
                    String filename = file.getName();
                    //System.out.println("You have selected: " + filename);  testing to see if file seleected was right
                    String path = file.getAbsolutePath();

                    //Reads contents of file into terminal 
                    //FileReader fr = new FileReader("filename");
                    // FileReader fr = new FileReader("D:/Documents/" + "filename")); 

                    BufferedReader br = null;
                    try {
                        br = new BufferedReader(new FileReader(path));
                        StringBuilder stringBuilder = new StringBuilder();
                        String line;
                        while ((line = br.readLine()) != null) {
                            //System.out.println(line); //This is now not needed, was used to test to see if the contents was recieved corrently
                            stringBuilder.append(line).append("\n");
                        }
                        text = stringBuilder.toString();;

                        printer();
                    } catch (IOException exp) {
                        exp.printStackTrace();
                    } finally {
                        try {
                            br.close();
                        } catch (Exception e) { e.printStackTrace(); }
                    }
                    //fr.close(); 
                }
            });
    }
    //Testing 
    //private static final String mText = 
    //    "This is a test to see if this text will be printed "; //This works perfectly fine
    //AttributedString mStyledText = new AttributedString(mText);
    /**
     * Print a single page containing some sample text.
     */
    public void printer() {

        /* Get the representation of the current printer and 
         * the current print job.
         */
        PrinterJob printerJob = PrinterJob.getPrinterJob();
        /* Build a book containing pairs of page painters (Printables)
         * and PageFormats. 
         */
        Book book = new Book();
        book.append(this, new PageFormat());
        /* Set the object to be printed (the Book) into the PrinterJob.
         * Doing this before bringing up the print dialog allows the
         * print dialog to correctly display the page range to be printed
         * and to dissallow any print settings not appropriate for the
         * pages to be printed.
         */
        printerJob.setPageable(book);
        /* Show the print dialog to the user. If the user cancels the print dialog then false
         * is returned. If true is returned we go ahead and print.
         */
        boolean doPrint = printerJob.printDialog();
        if (doPrint) {
            try {
                printerJob.print();
            } catch (PrinterException exception) {
                System.err.println("Printing error: " + exception);
            }
        }
    }

    /**
     * Print a page of text.
     */
    public int print(Graphics g, PageFormat format, int pageIndex) {

        AttributedString mStyledText = new AttributedString(text);

        Graphics2D g2d = (Graphics2D) g;
        g2d.translate(format.getImageableX(), format.getImageableY());
        g2d.setPaint(Color.black);// Sets text colour
        Point2D.Float pen = new Point2D.Float();
        AttributedCharacterIterator charIterator = mStyledText.getIterator();
        LineBreakMeasurer measurer = new LineBreakMeasurer(charIterator, g2d.getFontRenderContext());
        float wrappingWidth = (float) format.getImageableWidth();
        while (measurer.getPosition() < charIterator.getEndIndex()) {
            TextLayout layout = measurer.nextLayout(wrappingWidth);
            pen.y += layout.getAscent();
            float dx = layout.isLeftToRight() ? 0 : (wrappingWidth - layout.getAdvance());
            layout.draw(g2d, pen.x + dx, pen.y);
            pen.y += layout.getDescent() + layout.getLeading();
        }
        return Printable.PAGE_EXISTS;
    }
}

推荐答案

要实现具体的功能要求,即选择要上传的文件,然后使用JSF进行显示,您的方向就错了.

You're going in the wrong direction as to achieving the concrete functional requirement of selecting a file for upload and then displaying it using JSF.

您正尝试使用Swing/AWT选择文件.尽管这对于基于桌面的应用程序确实是正确的方法,但是对于基于Web的应用程序来说这完全是错误的方法.在基于Web的应用程序中,Java/JSF代码在Web服务器中运行,并生成一堆HTML/CSS/JS代码,这些代码通过网络发送到Web浏览器,然后由Web浏览器最终运行所有获得的HTML/CSS/JS代码.因此请注意,Java/JSF在运行Web服务器的物理计算机中运行.因此,Swing/AWT也将在运行Web服务器的物理机中运行,因此绝对不在运行Web浏览器的物理机中运行.基本上,当Swing/AWT显示一些UI时,它将显示在连接到Web服务器的监视器中,而不是显示在连接到Web浏览器的监视器中.

You're trying to select a file using Swing/AWT. Whilst this may indeed be the right approach for desktop based applications, this is totally the wrong approach for web based applications. In web based applications, Java/JSF code runs in the webserver and produces a bunch of HTML/CSS/JS code which get sent over network to the webbrowser who in turn finally runs all that obtained HTML/CSS/JS code. Note thus that Java/JSF runs in the physical machine where the webserver runs. So, Swing/AWT would also run in the physical machine where the webserver runs and thus definitely not in the physical machine where the webbrowser runs. Basically, when Swing/AWT shows some UI, it would be shown in the monitor attached to the webserver, not the one attached to the webbrowser.

您需要使用HTML/CSS/JS而不是Java来实现功能要求.您需要以这样的方式编写JSF代码,使其准确地生成适合于所需任务的特定HTML/CSS/JS代码.

You need to achieve your functional requirement in HTML/CSS/JS instead of in Java. You need to write JSF code in such way that it generates exactly the specific HTML/CSS/JS code suitable for the needed task.

在特定情况下,您要上传文件并显示其内容.在HTML世界中,文件选择器由<input type="file">元素表示.在标准JSF中,您可以使用<h:inputFile>组件生成该HTML.这是一个启动示例:

In your specific case, you want to upload a file and show its content. In HTML world, a file chooser is represented by the <input type="file"> element. In standard JSF, you can use <h:inputFile> component generate that HTML. Here's a kickoff example:

<h:form enctype="multipart/form-data">
    <h:inputFile value="#{bean.file}" />
    <h:commandButton value="Submit" action="#{bean.process}" />
    <h:messages />
</h:form>
<pre>#{bean.content}</pre>

与此豆

private Part file; // +getter+setter
private String content; // +getter

public void process() throws IOException {
    content = IOUtils.toString(file.getInputstream(), "UTF-8");
}

(注意:IOUtils是Apache Commons IO的一部分,因此上面的代码按原样工作)

(note: IOUtils is part of Apache Commons IO, so the above code works as-is)

  • Show ImageIcon from class to JSF page?
  • How to upload file using JSF 2.2 <h:inputFile>? Where is the saved File?
  • What is the need of JSF, when UI can be achieved with JavaScript libraries such as jQuery and AngularJS

这篇关于如何在JSF页面中执行Java Swing代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆