Author: michiel Date: 2009-12-07 15:55:55 +0100 (Mon, 07 Dec 2009) New Revision: 40137
Modified: mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/typehandler/AbstractTypeHandler.java mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/typehandler/BinaryHandler.java Log: some details to deal better with binaries Modified: mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/typehandler/AbstractTypeHandler.java =================================================================== --- mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/typehandler/AbstractTypeHandler.java 2009-12-07 14:55:12 UTC (rev 40136) +++ mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/typehandler/AbstractTypeHandler.java 2009-12-07 14:55:55 UTC (rev 40137) @@ -134,7 +134,8 @@ */ protected String getClasses(Node node, Field field) { StringBuilder buf = new StringBuilder("mm_validate "); - for (String styleClass : field.getDataType().getStyleClasses()) { + DataType dt = field.getDataType(); + for (String styleClass : dt.getStyleClasses()) { buf.append(styleClass).append(' '); } if (field instanceof org.mmbase.bridge.util.DataTypeField) { @@ -149,6 +150,10 @@ if (node != null) { buf.append(" mm_n_"); buf.append(node.getNumber()); + if (dt instanceof org.mmbase.datatypes.LengthDataType) { + buf.append(" mm_length_"); + buf.append(node.getSize(field.getName())); + } } return buf.toString(); } @@ -214,7 +219,9 @@ log.debug("No value found in context for " + fieldName); if (node != null) { value = node.isNull(fieldName) ? null : getValue(node, fieldName); - log.debug("Value for " + fieldName + " found in node " + value); + if (log.isDebugEnabled()) { + log.debug("Value for " + fieldName + " found in node " + value); + } } else if (useDefault) { value = field.getDataType().getDefaultValue(tag.getLocale(), tag.getCloudVar(), field); log.debug("No Node, defaultvalue found in field " + value); Modified: mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/typehandler/BinaryHandler.java =================================================================== --- mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/typehandler/BinaryHandler.java 2009-12-07 14:55:12 UTC (rev 40136) +++ mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/typehandler/BinaryHandler.java 2009-12-07 14:55:55 UTC (rev 40137) @@ -12,6 +12,7 @@ import javax.servlet.jsp.JspTagException; +import java.io.*; import java.util.*; import org.mmbase.bridge.*; import org.mmbase.bridge.jsp.taglib.*; @@ -72,14 +73,31 @@ } + + @Override + protected InputStream getValue(Node node, String fieldName) { + InputStream v = node.getInputStreamValue(fieldName); + if (log.isDebugEnabled()) { + log.debug("Value for " + node.getNumber() + ":" + fieldName + ": " + v.getClass() + " " + v + " of " + node.getClass()); + } + return v; + } + + /** * Returns the field value as specified by the client's post. */ @Override - protected Object getFieldValue(Node node, Field field) throws JspTagException { + protected SerializableInputStream getFieldValue(Node node, Field field) throws JspTagException { if (MultiPart.isMultipart(tag.getPageContext())) { ContextTag ct = tag.getContextTag(); - return ct.getInputStream(prefix(field.getName())); + log.debug("Field value '" + field.getName() + "' not found in context, using existing value "); + SerializableInputStream si = ct.getInputStream(prefix(field.getName())); + if (si == null || si.getName().length() == 0) { + return null; + } else { + return si; + } } else { return null; } @@ -87,48 +105,61 @@ @Override public String checkHtmlInput(Node node, Field field, boolean errors) throws JspTagException { - Object fieldValue = getFieldValue(node, field); + final Object fieldValue; + boolean fromUser = true; + { + SerializableInputStream si = getFieldValue(node, field); + if (si == null) { + fieldValue = getFieldValue(node, field, node == null); + log.debug("Field value '" + field.getName() + "' not found in context, using existing value " + fieldValue); + fromUser = false; + } else { + fieldValue = si; + } + } - if (fieldValue != null) { - DataType<Object> dt = field.getDataType(); - Collection<LocalizedString> col = dt.validate(fieldValue, node, field); - if (col.size() == 0) { - // do actually set the field, because some datatypes need cross-field checking - // also in an mm:form, you can simply commit. - SerializableInputStream bytes = (SerializableInputStream) fieldValue; + DataType<Object> dt = field.getDataType(); + if (log.isDebugEnabled()) { + log.debug("Validating " + fieldValue + " with " + dt); + } + Collection<LocalizedString> col = dt.validate(fieldValue, node, field); + if (col.size() == 0) { + // do actually set the field, because some datatypes need cross-field checking + // also in an mm:form, you can simply commit. + if (fromUser) { + SerializableInputStream bytes = Casting.toSerializableInputStream(fieldValue); if (node != null && ! field.isReadOnly() && ! bytes.getName().equals("")) { setValue(node, field.getName(), bytes); } - if (errors) { - return "<div id=\"" + prefixError(field.getName()) + "\" class=\"mm_check_noerror\"> </div>"; - } else { - return ""; + } + if (errors) { + return "<div id=\"" + prefixError(field.getName()) + "\" class=\"mm_check_noerror\"> </div>"; + } else { + return ""; + } + } else { + if (log.isDebugEnabled()) { + log.debug("Found errors " + errors); + } + FormTag form = tag.getFormTag(false, null); + if (form != null) { + form.setValid(false); + } + if (errors) { + StringBuilder show = new StringBuilder("<div id=\""); + show.append(prefixError(field.getName())); + show.append("\" class=\"mm_check_error\">"); + Locale locale = tag.getLocale(); + for (LocalizedString error : col) { + show.append("<span>"); + Xml.XMLEscape(error.get(locale), show); + show.append("</span>"); } + show.append("</div>"); + return show.toString(); } else { - FormTag form = tag.getFormTag(false, null); - if (form != null) { - form.setValid(false); - } - if (errors) { - StringBuilder show = new StringBuilder("<div id=\""); - show.append(prefixError(field.getName())); - show.append("\" class=\"mm_check_error\">"); - Locale locale = tag.getLocale(); - Iterator<LocalizedString> i = col.iterator(); - while (i.hasNext()) { - LocalizedString error = i.next(); - show.append("<span>"); - Xml.XMLEscape(error.get(locale), show); - show.append("</span>"); - } - show.append("</div>"); - return show.toString(); - } else { - return ""; - } + return ""; } - } else { - return ""; } } @@ -140,7 +171,11 @@ public boolean useHtmlInput(Node node, Field field) throws JspTagException { SerializableInputStream bytes = (SerializableInputStream) getFieldValue(node, field); if (bytes == null) { - throw new BridgeException("getBytes(" + prefix(field.getName()) + ") returned null (node= " + node.getNumber() +") field=(" + field + ") (Was your form enctype='multipart/form-data' ?"); + if (! MultiPart.isMultipart(tag.getPageContext())) { + throw new BridgeException("getBytes(" + prefix(field.getName()) + ") returned null (node= " + node.getNumber() +") field=(" + field + ") (Was your form enctype='multipart/form-data' ?"); + } else { + return false; + } } log.debug("Found " + bytes.getName()); if ("".equals(bytes.getName())) { @@ -156,7 +191,8 @@ /** * @see TypeHandler#whereHtmlInput(Field) */ - @Override public String whereHtmlInput(Field field) throws JspTagException { + @Override + public String whereHtmlInput(Field field) throws JspTagException { log.error("Don't know what to do with byte[]"); return super.whereHtmlInput(field); } _______________________________________________ Cvs mailing list Cvs@lists.mmbase.org http://lists.mmbase.org/mailman/listinfo/cvs