code: @Override
      protected void doProcess(ITemplateContext context, IProcessableElementTag tag, AttributeName attributeName, String attributeValue,
              Object expressionResult, IElementTagStructureHandler structureHandler) {
          if (expressionResult == null) { // e.g. la:property="${detarame}"
              throw new IllegalStateException("The expressionResult cannot be null: " + attributeName + ", " + attributeValue);
          }
          // #hope p1us2er0 pri.C nest property (2018/09/04)
          final String propertyName = expressionResult.toString();
          final boolean hasThName = tag.hasAttribute(StandardDialect.PREFIX, "name");
          final boolean hasThText = tag.hasAttribute(StandardDialect.PREFIX, "text");
          final boolean hasThValue = tag.hasAttribute(StandardDialect.PREFIX, "value");
  
          switch (tag.getElementCompleteName()) {
          case "input":
              if (!hasThName) {
                  structureHandler.setAttribute("th:name", propertyName);
              }
              if (!hasThValue) {
                  if (!Arrays.asList("checkbox", "radio").contains(tag.getAttributeValue("type"))) {
                      structureHandler.setAttribute("th:value", "${" + propertyName + "}");
                  }
              }
              break;
          case "select":
              if (!hasThName) {
                  structureHandler.setAttribute("th:name", propertyName);
              }
              break;
          case "textarea":
              if (!hasThName) {
                  structureHandler.setAttribute("th:name", propertyName);
              }
              if (!hasThText) {
                  structureHandler.setAttribute("th:text", "${" + propertyName + "}");
              }
              break;
          default:
              if (!hasThText) {
                  structureHandler.setAttribute("th:text", "${" + propertyName + "}");
              }
              break;
          }
      }
docs: ==========