protected FormFieldValue getFieldNullValue(final FormWidget formWidget) {
   FormFieldValue fieldValue = null;
   if (formWidget.getType().equals(WidgetType.CHECKBOX)) {
     fieldValue = new FormFieldValue(Boolean.FALSE, Boolean.class.getName());
   } else if (formWidget.getType().equals(WidgetType.LISTBOX_SIMPLE)
       || formWidget.getType().equals(WidgetType.RADIOBUTTON_GROUP)) {
     if (formWidget.getAvailableValues() != null && formWidget.getAvailableValues().size() > 0) {
       fieldValue =
           new FormFieldValue(
               formWidget.getAvailableValues().get(0).getValue(), String.class.getName());
     } else {
       fieldValue = new FormFieldValue("", String.class.getName());
     }
   } else if (formWidget.getType().equals(WidgetType.DATE)) {
     String formatPattern = null;
     if (formWidget.getDisplayFormat() != null && formWidget.getDisplayFormat().length() > 0) {
       formatPattern = formWidget.getDisplayFormat();
     } else {
       formatPattern = defaultDateFormatPattern;
     }
     fieldValue = new FormFieldValue(null, Date.class.getName(), formatPattern);
   } else if (formWidget.getType().equals(WidgetType.DURATION)) {
     fieldValue = new FormFieldValue(Long.valueOf(0), Long.class.getName());
   } else {
     fieldValue = new FormFieldValue(null, Serializable.class.getName());
   }
   return fieldValue;
 }
 protected void storeWidgetInCacheAndSetCacheID(
     final FormCacheUtil formCacheUtil,
     final String formID,
     final String pageID,
     final String locale,
     final Date processDeployementDate,
     final FormWidget formWidget) {
   if (isExpressionDynamic(formWidget.getInitialValueExpression())
       || isArrayOfExpressionsDynamic(formWidget.getInitialValueExpressionArray())
       || isExpressionDynamic(formWidget.getAvailableValuesExpression())
       || isListOfExpressionsDynamic(formWidget.getAvailableValues())
       || isListOfListOfExpressionsDynamic(formWidget.getTableAvailableValues())
       || isExpressionDynamic(formWidget.getDisplayConditionExpression())) {
     formWidget.setHasDynamicValue(true);
   }
   final String formWidgetCacheId =
       formCacheUtil.storeFormWidget(formID, pageID, locale, processDeployementDate, formWidget);
   formWidget.setFormWidgetCacheId(formWidgetCacheId);
   if (formWidget.getValidators() != null) {
     formWidget.setValidatorsCacheId(
         formCacheUtil.storeFieldValidators(
             formID,
             pageID,
             formWidget.getId(),
             locale,
             processDeployementDate,
             formWidget.getValidators()));
   }
 }
 /**
  * @param formWidget
  * @param evaluatedExpressions
  */
 protected void setAvailableValuesListsAndArrays(
     final FormWidget formWidget, final Map<String, Serializable> evaluatedExpressions) {
   final String widgetId = formWidget.getId();
   if (WidgetType.TABLE.equals(formWidget.getType())) {
     if (evaluatedExpressions.containsKey(
         widgetId
             + EXPRESSION_KEY_SEPARATOR
             + WIDGET_AVAILABLE_VALUE_VALUE
             + 0
             + INDEX_SEPARATOR
             + 0)) {
       int availableValueRowIndex = 0;
       do {
         int availableValueColumnIndex = 0;
         do {
           final Object availableValuelabel =
               evaluatedExpressions.get(
                   widgetId
                       + EXPRESSION_KEY_SEPARATOR
                       + WIDGET_AVAILABLE_VALUE_LABEL
                       + availableValueRowIndex
                       + INDEX_SEPARATOR
                       + availableValueColumnIndex);
           final Object availableValueValue =
               evaluatedExpressions.get(
                   widgetId
                       + EXPRESSION_KEY_SEPARATOR
                       + WIDGET_AVAILABLE_VALUE_VALUE
                       + availableValueRowIndex
                       + INDEX_SEPARATOR
                       + availableValueColumnIndex);
           final FormFieldAvailableValue availableValue =
               formWidget
                   .getTableAvailableValues()
                   .get(availableValueRowIndex)
                   .get(availableValueColumnIndex);
           availableValue.setLabel(getStringValue(availableValuelabel));
           availableValue.setValue(getStringValue(availableValueValue));
           availableValueColumnIndex++;
         } while (evaluatedExpressions.containsKey(
             widgetId
                 + EXPRESSION_KEY_SEPARATOR
                 + WIDGET_AVAILABLE_VALUE_VALUE
                 + availableValueRowIndex
                 + INDEX_SEPARATOR
                 + availableValueColumnIndex));
         availableValueRowIndex++;
       } while (evaluatedExpressions.containsKey(
           widgetId
               + EXPRESSION_KEY_SEPARATOR
               + WIDGET_AVAILABLE_VALUE_VALUE
               + availableValueRowIndex
               + INDEX_SEPARATOR
               + 0));
     }
   } else {
     if (evaluatedExpressions.containsKey(
         widgetId + EXPRESSION_KEY_SEPARATOR + WIDGET_AVAILABLE_VALUE_VALUE + 0)) {
       int availableValueIndex = 0;
       do {
         final Object availableValuelabel =
             evaluatedExpressions.get(
                 widgetId
                     + EXPRESSION_KEY_SEPARATOR
                     + WIDGET_AVAILABLE_VALUE_LABEL
                     + availableValueIndex);
         final Object availableValueValue =
             evaluatedExpressions.get(
                 widgetId
                     + EXPRESSION_KEY_SEPARATOR
                     + WIDGET_AVAILABLE_VALUE_VALUE
                     + availableValueIndex);
         final FormFieldAvailableValue availableValue =
             formWidget.getAvailableValues().get(availableValueIndex);
         availableValue.setLabel(getStringValue(availableValuelabel));
         availableValue.setValue(getStringValue(availableValueValue));
         availableValueIndex++;
       } while (evaluatedExpressions.containsKey(
           widgetId
               + EXPRESSION_KEY_SEPARATOR
               + WIDGET_AVAILABLE_VALUE_VALUE
               + availableValueIndex));
     }
   }
 }
 /** @param formWidget */
 protected void addFormWidgetAvailableValuesExpressions(
     final FormWidget formWidget, final List<Expression> expressionsToEvaluate) {
   final String widgetId = formWidget.getId();
   if (formWidget.getAvailableValuesExpression() != null
       && !WidgetType.SUGGESTBOX_ASYNC.equals(formWidget.getType())) {
     final Expression availableValuesExpression = formWidget.getAvailableValuesExpression();
     availableValuesExpression.setName(
         widgetId + EXPRESSION_KEY_SEPARATOR + WIDGET_AVAILABLE_VALUES);
     expressionsToEvaluate.add(availableValuesExpression);
   } else {
     if (WidgetType.TABLE.equals(formWidget.getType())) {
       final List<List<FormFieldAvailableValue>> tableAvailableValues =
           formWidget.getTableAvailableValues();
       if (tableAvailableValues != null && !tableAvailableValues.isEmpty()) {
         int availableValueRowIndex = 0;
         for (final List<FormFieldAvailableValue> formFieldAvailableValuesRow :
             tableAvailableValues) {
           int availableValueIndex = 0;
           for (final FormFieldAvailableValue formFieldAvailableValue :
               formFieldAvailableValuesRow) {
             final Expression availableValueLabelExpression =
                 formFieldAvailableValue.getLabelExpression();
             availableValueLabelExpression.setName(
                 widgetId
                     + EXPRESSION_KEY_SEPARATOR
                     + WIDGET_AVAILABLE_VALUE_LABEL
                     + availableValueRowIndex
                     + INDEX_SEPARATOR
                     + availableValueIndex);
             expressionsToEvaluate.add(availableValueLabelExpression);
             final Expression availableValueValueExpression =
                 formFieldAvailableValue.getValueExpression();
             availableValueValueExpression.setName(
                 widgetId
                     + EXPRESSION_KEY_SEPARATOR
                     + WIDGET_AVAILABLE_VALUE_VALUE
                     + availableValueRowIndex
                     + INDEX_SEPARATOR
                     + availableValueIndex);
             expressionsToEvaluate.add(availableValueValueExpression);
             availableValueIndex++;
           }
           availableValueRowIndex++;
         }
       }
     } else {
       final List<FormFieldAvailableValue> availableValues = formWidget.getAvailableValues();
       if (availableValues != null && !availableValues.isEmpty()) {
         int availableValueIndex = 0;
         for (final FormFieldAvailableValue formFieldAvailableValue : availableValues) {
           final Expression availableValueLabelExpression =
               formFieldAvailableValue.getLabelExpression();
           availableValueLabelExpression.setName(
               widgetId
                   + EXPRESSION_KEY_SEPARATOR
                   + WIDGET_AVAILABLE_VALUE_LABEL
                   + availableValueIndex);
           expressionsToEvaluate.add(availableValueLabelExpression);
           final Expression availableValueValueExpression =
               formFieldAvailableValue.getValueExpression();
           availableValueValueExpression.setName(
               widgetId
                   + EXPRESSION_KEY_SEPARATOR
                   + WIDGET_AVAILABLE_VALUE_VALUE
                   + availableValueIndex);
           expressionsToEvaluate.add(availableValueValueExpression);
           availableValueIndex++;
         }
       }
     }
   }
 }