code: @Override
      protected void doProcess(ITemplateContext context, IProcessableElementTag tag, AttributeName attributeName, String attributeValue,
              Object expressionResult, IElementTagStructureHandler structureHandler) {
          final String optionClsName = expressionResult.toString();
          structureHandler.setAttribute("th:each", String.format("cdef : ${#cls.listAll('%s')}", optionClsName));
          structureHandler.setAttribute("th:value", "${cdef.code()}");
          structureHandler.setAttribute("th:text", "${cdef.alias()}");
  
          List<IProcessableElementTag> elementStack = context.getElementStack();
          if (elementStack.size() >= 2) {
              IProcessableElementTag parentTag = elementStack.get(elementStack.size() - 2);
              String propertyName = parentTag.getAttributeValue(getDialectPrefix(), "property");
              if (!StringUtils.isEmpty(propertyName)) {
                  structureHandler.setAttribute("th:selected", String.format("${cdef} == ${%s}", propertyName));
              }
          }
      }
docs: ==========