/** * Converts the value into an entity. The type of the entity depends on the type that the daoCrud * returns. * * @param facesContext current faces context * @param component current component * @param value current value submitted from user. * @return An Entity */ public Object getAsObject( final FacesContext facesContext, final UIComponent component, final String value) { logger.debug( String.format( "getAsObject() called value=%s, component=%s, value class=%s", value, component.getClientId(facesContext), value.getClass().getName())); UIInput input = (UIInput) component; if (value.equals("-1") && (input.isRequired() || component.getAttributes().get("required_bean") != null)) { logger.debug("Required field and the value was -1"); throw new ConverterException(new FacesMessage("Required", "Required")); } try { Serializable entityId = CrudUtils.getIdObject(value, this.idType); logger.debug(String.format("entityId %s", entityId)); if (dao == null) { ObjectRegistry objectRegistry = CrankContext.getObjectRegistry(); Map<String, GenericDao> repos = (Map<String, GenericDao>) objectRegistry.getObject("repos"); if (managedObject != null) { logger.debug("Looking up DAO by managedObject"); dao = repos.get(managedObject.getName()); } else { Object key = component.getAttributes().get("beanType"); logger.debug("Looking up DAO by beanType"); dao = repos.get((String) key); } } Object object = dao.read(entityId); logger.debug(String.format("Read object %s", object)); if (object == null) { if ("-1".equals(value)) { logger.debug("No object found and the value was -1"); throw new ConverterException(new FacesMessage("Required", "Required")); } else { throw new ConverterException( new FacesMessage( "Can't find object with id " + value, "Can't find object with id " + value)); } } LogUtils.debug(logger, "Returning converted object %s", object); return object; } catch (ConverterException ex) { throw ex; } catch (Exception ex) { logger.error("Unable to convert object", ex); String message = String.format("Unable to convert, fatal issue, %s ", ex.getMessage()); throw new ConverterException(new FacesMessage(message, message)); } }
public void testTransientState() { transientState = !widgetTransient.isRequired(); }
// === continue code from InputRendererUtil === // ClientSide validation // com.ibm.xsp.renderkit.html_basic.InputRendererUtil.generateClientSideValidation(FacesContext, // UIInput, ResponseWriter) private void generateClientSideValidation( FacesContext context, UIInput uiInput, ResponseWriter writer) throws IOException { // Check if the input field is required boolean required = uiInput.isRequired(); Converter c = InputRendererUtil.findConverter(context, uiInput); Validator[] v = uiInput.getValidators(); // Check if it might make sense to generate a function boolean validate = required; if (!validate) { validate = c instanceof ClientSideConverter; } if (!validate) { for (int i = 0; i < v.length; i++) { validate = v[i] instanceof ClientSideValidator; if (validate) { break; } } } if (validate) { // This flag is maintained if we actually need to generate the function // Some converter/validator may not actually generate any client code, depending on their // parameters validate = false; StringBuilder b = new StringBuilder(128); b.append("XSP.attachValidator("); // $NON-NLS-1$ JavaScriptUtil.addString(b, uiInput.getClientId(context)); // Add the required flag if (required) { b.append(",new XSP.RequiredValidator("); // $NON-NLS-1$ JavaScriptUtil.addMessage(b, InputRendererUtil.getRequiredMessage(context, uiInput)); b.append(")"); validate = true; } else { b.append(",null"); // $NON-NLS-1$ } // Add the converter if (c instanceof ClientSideConverter) { ClientSideConverter clientSideConverter = (ClientSideConverter) c; // TODO this is handling of converterRenderer // differs from the original implementation in InputRendererUtil. String s; Renderer renderer = FacesUtil.getRenderer(context, uiInput.getFamily(), uiInput.getRendererType()); ClientSideConverter converterRenderer = (ClientSideConverter) FacesUtil.getRendererAs(renderer, ClientSideConverter.class); if (null != converterRenderer) { // if the control renderer implements ClientSideConverter // delegate to the renderer instead of to the converter. s = converterRenderer.generateClientSideConverter(context, uiInput); } else { s = clientSideConverter.generateClientSideConverter(context, uiInput); } if (StringUtil.isNotEmpty(s)) { b.append(","); b.append(s); // not JSUtil because contains client script. validate = true; } else { b.append(",null"); // $NON-NLS-1$ } } else { b.append(",null"); // $NON-NLS-1$ } // And add the validator for (int i = 0; i < v.length; i++) { if (v[i] instanceof ClientSideValidator) { String s = ((ClientSideValidator) v[i]).generateClientSideValidation(context, uiInput); if (StringUtil.isNotEmpty(s)) { b.append(","); b.append(s); // not JSUtil because contains client script. validate = true; } } } // Finally, check for multiple values String multiSep = null; if (uiInput instanceof UIInputEx) { multiSep = ((UIInputEx) uiInput).getMultipleSeparator(); } if (c instanceof ListConverter) { multiSep = ((ListConverter) c).getDelimiter(); if (StringUtil.isEmpty(multiSep)) { multiSep = ","; // $NON-NLS-1$ } } if (StringUtil.isNotEmpty(multiSep)) { b.append(","); JSUtil.addString(b, multiSep); } b.append(");"); // get the scriptcollector component (needed to add script blocks the the rendered output). if (validate) { JavaScriptUtil.addScriptOnLoad(b.toString()); } } }
public void testFullState() { fullState = widgetFull.isRequired(); }