in framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java [269:517]
public void renderDropDownField(Appendable writer, Map<String, Object> context, DropDownField dropDownField) throws IOException {
ModelFormField modelFormField = dropDownField.getModelFormField();
ModelForm modelForm = modelFormField.getModelForm();
String currentValue = modelFormField.getEntry(context);
String conditionGroup = modelFormField.getConditionGroup();
boolean disabled = modelFormField.getDisabled(context);
List<ModelFormField.OptionValue> allOptionValues = dropDownField.getAllOptionValues(context, WidgetWorker.getDelegator(context));
ModelFormField.AutoComplete autoComplete = dropDownField.getAutoComplete();
String event = modelFormField.getEvent();
String action = modelFormField.getAction(context);
Integer textSize = 0;
if (UtilValidate.isNotEmpty(dropDownField.getTextSize())) {
try {
textSize = Integer.parseInt(dropDownField.getTextSize());
} catch (NumberFormatException nfe) {
Debug.logError(nfe, "Error reading size of a field fieldName=" + dropDownField.getModelFormField().getFieldName() + " FormName= "
+ dropDownField.getModelFormField().getModelForm().getName(), MODULE);
}
if (textSize > 0 && UtilValidate.isNotEmpty(currentValue) && currentValue.length() > textSize) {
currentValue = currentValue.substring(0, textSize - 8) + "..." + currentValue.substring(currentValue.length() - 5);
}
}
boolean ajaxEnabled = autoComplete != null && this.javaScriptEnabled;
String className = "";
String alert = "false";
String name = modelFormField.getParameterName(context);
String id = modelFormField.getCurrentContainerId(context);
String multiple = dropDownField.getAllowMultiple() ? "multiple" : "";
String otherFieldName = "";
String formName = modelForm.getName();
String size = dropDownField.getSize();
String dDFCurrent = dropDownField.getCurrent();
String firstInList = "";
String explicitDescription = "";
String allowEmpty = "";
StringBuilder options = new StringBuilder();
StringBuilder ajaxOptions = new StringBuilder();
if (UtilValidate.isNotEmpty(modelFormField.getWidgetStyle())) {
className = modelFormField.getWidgetStyle();
if (modelFormField.shouldBeRed(context)) {
alert = "true";
}
}
//check for required field style on single forms
if (shouldApplyRequiredField(modelFormField)) {
String requiredStyle = modelFormField.getRequiredFieldStyle();
if (UtilValidate.isEmpty(requiredStyle)) {
requiredStyle = "required";
}
if (UtilValidate.isEmpty(className)) {
className = requiredStyle;
} else {
className = requiredStyle + " " + className;
}
}
String currentDescription = null;
if (UtilValidate.isNotEmpty(currentValue)) {
for (ModelFormField.OptionValue optionValue : allOptionValues) {
if (optionValue.getKey().equals(currentValue)) {
currentDescription = optionValue.getDescription();
break;
}
}
}
int otherFieldSize = dropDownField.getOtherFieldSize();
if (otherFieldSize > 0) {
otherFieldName = dropDownField.getParameterNameOther(context);
}
// if the current value should go first, stick it in
if (UtilValidate.isNotEmpty(currentValue) && "first-in-list".equals(dropDownField.getCurrent())) {
firstInList = "first-in-list";
}
explicitDescription = (currentDescription != null ? currentDescription : dropDownField.getCurrentDescription(context));
if (UtilValidate.isEmpty(explicitDescription)) {
explicitDescription = (FieldInfoWithOptions.getDescriptionForOptionKey(currentValue, allOptionValues));
}
if (textSize > 0 && UtilValidate.isNotEmpty(explicitDescription) && explicitDescription.length() > textSize) {
explicitDescription = explicitDescription.substring(0, textSize - 8) + "..."
+ explicitDescription.substring(explicitDescription.length() - 5);
}
explicitDescription = encode(explicitDescription, modelFormField, context);
// if allow empty is true, add an empty option
if (dropDownField.getAllowEmpty()) {
allowEmpty = "Y";
}
List<String> currentValueList = null;
if (UtilValidate.isNotEmpty(currentValue) && dropDownField.getAllowMultiple()) {
// If currentValue is Array, it will start with [
if (currentValue.startsWith("[")) {
currentValueList = StringUtil.toList(currentValue);
} else {
currentValueList = UtilMisc.toList(currentValue);
}
}
options.append("[");
Iterator<ModelFormField.OptionValue> optionValueIter = allOptionValues.iterator();
int count = 0;
while (optionValueIter.hasNext()) {
ModelFormField.OptionValue optionValue = optionValueIter.next();
if (options.length() > 1) {
options.append(",");
}
options.append("{'key':'");
String key = encode(optionValue.getKey(), modelFormField, context);
options.append(key);
options.append("'");
options.append(",'description':'");
String description = optionValue.getDescription();
if (textSize > 0 && description.length() > textSize) {
description = description.substring(0, textSize - 8) + "..." + description.substring(description.length() - 5);
}
options.append(encode(description.replaceAll("'", "\\\\\'"), modelFormField, context)); // related to OFBIZ-6504
if (UtilValidate.isNotEmpty(currentValueList)) {
options.append("'");
options.append(",'selected':'");
if (currentValueList.contains(optionValue.getKey())) {
options.append("selected");
} else {
options.append("");
}
}
options.append("'}");
if (ajaxEnabled) {
count++;
ajaxOptions.append(optionValue.getKey()).append(": ");
ajaxOptions.append(" '").append(optionValue.getDescription()).append("'");
if (count != allOptionValues.size()) {
ajaxOptions.append(", ");
}
}
}
options.append("]");
String noCurrentSelectedKey = dropDownField.getNoCurrentSelectedKey(context);
String otherValue = "";
String fieldName = "";
// Adapted from work by Yucca Korpela
// http://www.cs.tut.fi/~jkorpela/forms/combo.html
if (otherFieldSize > 0) {
fieldName = modelFormField.getParameterName(context);
Map<String, ? extends Object> dataMap = modelFormField.getMap(context);
if (dataMap == null) {
dataMap = context;
}
Object otherValueObj = dataMap.get(otherFieldName);
otherValue = (otherValueObj == null) ? "" : otherValueObj.toString();
}
String frequency = "";
String minChars = "";
String choices = "";
String autoSelect = "";
String partialSearch = "";
String partialChars = "";
String ignoreCase = "";
String fullSearch = "";
if (ajaxEnabled) {
frequency = autoComplete.getFrequency();
minChars = autoComplete.getMinChars();
choices = autoComplete.getChoices();
autoSelect = autoComplete.getAutoSelect();
partialSearch = autoComplete.getPartialSearch();
partialChars = autoComplete.getPartialChars();
ignoreCase = autoComplete.getIgnoreCase();
fullSearch = autoComplete.getFullSearch();
}
String tabindex = modelFormField.getTabindex();
StringWriter sr = new StringWriter();
sr.append("<@renderDropDownField ");
sr.append("name=\"");
sr.append(name);
sr.append("\" className=\"");
sr.append(className);
sr.append("\" alert=\"");
sr.append(alert);
sr.append("\" id=\"");
sr.append(id);
sr.append("\" multiple=\"");
sr.append(multiple);
sr.append("\" formName=\"");
sr.append(formName);
sr.append("\" otherFieldName=\"");
sr.append(otherFieldName);
sr.append("\" event=\"");
if (event != null) {
sr.append(event);
}
sr.append("\" action=\"");
if (action != null) {
sr.append(action);
}
sr.append("\" size=\"");
sr.append(size);
sr.append("\" firstInList=\"");
sr.append(firstInList);
sr.append("\" currentValue=\"");
sr.append(currentValue);
sr.append("\" explicitDescription=\"");
sr.append(explicitDescription);
sr.append("\" allowEmpty=\"");
sr.append(allowEmpty);
sr.append("\" options=");
sr.append(options.toString());
sr.append(" fieldName=\"");
sr.append(fieldName);
sr.append("\" otherFieldName=\"");
sr.append(otherFieldName);
sr.append("\" otherValue=\"");
sr.append(otherValue);
sr.append("\" otherFieldSize=");
sr.append(Integer.toString(otherFieldSize));
sr.append(" dDFCurrent=\"");
sr.append(dDFCurrent);
sr.append("\" ajaxEnabled=");
sr.append(Boolean.toString(ajaxEnabled));
sr.append(" noCurrentSelectedKey=\"");
sr.append(noCurrentSelectedKey);
sr.append("\" ajaxOptions=\"");
sr.append(ajaxOptions.toString());
sr.append("\" frequency=\"");
sr.append(frequency);
sr.append("\" minChars=\"");
sr.append(minChars);
sr.append("\" choices=\"");
sr.append(choices);
sr.append("\" autoSelect=\"");
sr.append(autoSelect);
sr.append("\" partialSearch=\"");
sr.append(partialSearch);
sr.append("\" partialChars=\"");
sr.append(partialChars);
sr.append("\" ignoreCase=\"");
sr.append(ignoreCase);
sr.append("\" fullSearch=\"");
sr.append(fullSearch);
sr.append("\" conditionGroup=\"");
sr.append(conditionGroup);
sr.append("\" tabindex=\"");
sr.append(tabindex);
sr.append("\" disabled=");
sr.append(Boolean.toString(disabled));
sr.append(" />");
executeMacro(writer, sr.toString());
ModelFormField.SubHyperlink subHyperlink = dropDownField.getSubHyperlink();
if (subHyperlink != null && subHyperlink.shouldUse(context)) {
makeHyperlinkString(writer, subHyperlink, context);
}
this.appendTooltip(writer, context, modelFormField);
}