public static final String CSRF_FIELD = "csrf";
- String csrf;
+ private String csrf;
public Form(HttpServletRequest hsr) {
csrf = RandomToken.generateToken(32);
@Override
public void output(PrintWriter out, Language l, Map<String, Object> vars) {
out.println("<form method='POST' autocomplete='off'>");
+ failed = false;
outputContent(out, l, vars);
out.print("<input type='hidden' name='" + CSRF_FIELD + "' value='");
out.print(getCSRFToken());
protected abstract void outputContent(PrintWriter out, Language l, Map<String, Object> vars);
- protected void outputError(PrintWriter out, ServletRequest req, String text) {
+ boolean failed;
+
+ protected void outputError(PrintWriter out, ServletRequest req, String text, Object... contents) {
+ if ( !failed) {
+ failed = true;
+ out.println("<div class='formError'>");
+ }
out.print("<div>");
- out.print(Page.translate(req, text));
+ if (contents.length == 0) {
+ out.print(Page.translate(req, text));
+ } else {
+ out.print(String.format(Page.translate(req, text), contents));
+ }
out.println("</div>");
}
+ protected void outputErrorPlain(PrintWriter out, String text) {
+ if ( !failed) {
+ failed = true;
+ out.println("<div class='formError'>");
+ }
+ out.print("<div>");
+ out.print(text);
+ out.println("</div>");
+ }
+
+ public boolean isFailed(PrintWriter out) {
+ if (failed) {
+ out.println("</div>");
+ }
+ return failed;
+ }
+
protected String getCSRFToken() {
return csrf;
}