Unlike the previous version of the HTML5 and Java calculator this one is much more than a static compilation to JavaScript. This one is using real JAR file with real Java classes. This means that the same code that runs in your browser can also run on your server.
$ unzip -l demo.calculator.jar Archive: demo.calculator.jar Length Date Time Name --------- ---------- ----- ---- 124 2012-11-28 15:23 META-INF/MANIFEST.MF 635 2012-11-28 15:23 org/apidesign/bck2brwsr/mavenhtml/Calculator$3.class 635 2012-11-28 15:23 org/apidesign/bck2brwsr/mavenhtml/Calculator$14.class 635 2012-11-28 15:23 org/apidesign/bck2brwsr/mavenhtml/Calculator$15.class 633 2012-11-28 15:23 org/apidesign/bck2brwsr/mavenhtml/Calculator$9.class 2835 2012-11-28 15:23 org/apidesign/bck2brwsr/mavenhtml/Calculator.class 633 2012-11-28 15:23 org/apidesign/bck2brwsr/mavenhtml/Calculator$4.class 606 2012-11-28 15:23 org/apidesign/bck2brwsr/mavenhtml/Calculator$6.class 633 2012-11-28 15:23 org/apidesign/bck2brwsr/mavenhtml/Calculator$5.class 635 2012-11-28 15:23 org/apidesign/bck2brwsr/mavenhtml/Calculator$11.class 2153 2012-11-28 15:23 org/apidesign/bck2brwsr/mavenhtml/App.class 635 2012-11-28 15:23 org/apidesign/bck2brwsr/mavenhtml/Calculator$13.class 596 2012-11-28 15:23 org/apidesign/bck2brwsr/mavenhtml/Calculator$1.class 635 2012-11-28 15:23 org/apidesign/bck2brwsr/mavenhtml/Calculator$10.class 635 2012-11-28 15:23 org/apidesign/bck2brwsr/mavenhtml/Calculator$12.class 634 2012-11-28 15:23 org/apidesign/bck2brwsr/mavenhtml/Calculator$2.class 635 2012-11-28 15:23 org/apidesign/bck2brwsr/mavenhtml/Calculator$16.class 633 2012-11-28 15:23 org/apidesign/bck2brwsr/mavenhtml/Calculator$8.class 633 2012-11-28 15:23 org/apidesign/bck2brwsr/mavenhtml/Calculator$7.class 702 2012-11-28 16:27 org/apidesign/bck2brwsr/htmlpage/api/Title.class 486 2012-11-28 16:27 org/apidesign/bck2brwsr/htmlpage/api/Page.class 440 2012-11-28 16:27 org/apidesign/bck2brwsr/htmlpage/api/OnClick.class 791 2012-11-28 16:27 org/apidesign/bck2brwsr/htmlpage/api/Button.class 1486 2012-11-28 16:27 org/apidesign/bck2brwsr/htmlpage/api/Element.class 1136 2012-11-28 16:27 org/apidesign/bck2brwsr/htmlpage/api/Input.class
package org.apidesign.bck2brwsr.mavenhtml; import org.apidesign.bck2brwsr.htmlpage.api.OnClick; import org.apidesign.bck2brwsr.htmlpage.api.Page; /** HTML5 & Java demo showing the power of annotation processors * as well as other goodies, including type-safe association between * an XHTML page and Java. * * @author Jaroslav Tulach <jaroslav.tulach@apidesign.org> */ @Page(xhtml="Calculator.xhtml") public class App { private static double memory; private static String operation; @OnClick(id="clear") static void clear() { memory = 0; operation = null; Calculator.DISPLAY.setValue("0"); } @OnClick(id= { "plus", "minus", "mul", "div" }) static void applyOp(String op) { memory = getValue(); operation = op; Calculator.DISPLAY.setValue("0"); } @OnClick(id="result") static void computeTheValue() { switch (operation) { case "plus": setValue(memory + getValue()); break; case "minus": setValue(memory - getValue()); break; case "mul": setValue(memory * getValue()); break; case "div": setValue(memory / getValue()); break; default: throw new IllegalStateException(operation); } } @OnClick(id={"n0", "n1", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9"}) static void addDigit(String digit) { digit = digit.substring(1); String v = Calculator.DISPLAY.getValue(); if (getValue() == 0.0) { Calculator.DISPLAY.setValue(digit); } else { Calculator.DISPLAY.setValue(v + digit); } } private static void setValue(double v) { StringBuilder sb = new StringBuilder(); sb.append(v); Calculator.DISPLAY.setValue(sb.toString()); } private static double getValue() { try { return Double.parseDouble(Calculator.DISPLAY.getValue()); } catch (NumberFormatException ex) { Calculator.DISPLAY.setValue("err"); return 0.0; } } }