Как получить карту модели из модели по ключевой переменной thymeleaf - PullRequest
0 голосов
/ 28 января 2019

> код контроллера java

import com.springboot.app.controllers.GlobalController;
import com.springboot.app.entities.Branch;
import com.springboot.app.services.ReportParamsAccessListService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;

import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;


import javax.persistence.Tuple;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;

@Controller
public class GlobalReportController extends GlobalController {

    @Autowired
    ReportParamsAccessListService reportParamsAccessListService;



    protected  String branchParam(Model model,String paramName,String type, String name){
        ModelMap modelMap = new ModelMap();
        List<Branch> branchList = branchService.findAll();
        modelMap.put("branchList",branchList);
        modelMap.put("attr_name",name);
        modelMap.put("attr_type",type);
        model.addAttribute("branch",modelMap);
        return "branch_param";

    }

    protected  String dateParam(Model model,String paramName,String        type,String name){
        ModelMap modelMap = new ModelMap();
        modelMap.put("attr_name",name);
        modelMap.put("attr_type",type);
        model.addAttribute("date",modelMap);
        return "date_param";
    }


    @RequestMapping(value = "/report/test",method = RequestMethod.GET)
    public   String reportParams(Model model,String reportLink)   {
        LinkedHashMap<String,String> params = new LinkedHashMap<String, String>();
        List<Tuple> reportParamAccess =  reportParamsAccessListService.getReportParamAccess("reports/remittance_rub");
        for (int i = 0; i<reportParamAccess.size(); i++){
        try {
                String name =  reportParamAccess.get(i).get("name").toString();
                String paramName =  reportParamAccess.get(i).get("param_name").toString();
                String attrType = reportParamAccess.get(i).get("attr_type").toString();
                String attrName = reportParamAccess.get(i).get("attr_name").toString();
                switch (name){
                    case "branch":
                        params.put(paramName,branchParam(model,paramName,attrType,attrName));
                        break;
                    case "date":
                        params.put(paramName,dateParam(model,paramName,attrType,attrName));
                    default:
                }
             } catch (Exception e) {
                e.printStackTrace();
            }
         }
        //System.out.println("params  = "  + params);
        model.addAttribute("params",params);
        //System.out.println(" dataAlling = " + model);
        //return "report_params";
        return pageContent(model,"report_params");

    }


}

> использование механизма шаблонов thymealeaf

> фрагмент кода фрагмента HTML-кода

<div class="col-3"  xmlns:th="http://www.thymeleaf.org" th:fragment="branch_param">
 <div class="form-group" >
    <button type="button" id="dropdownUl" class="btn btn-info dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
        Select Branch
    </button>
    <div class="dropdown hide">
        <ul>
            <li th:each="branchList : ${branch.branchList}">
                <input th:id = "'md_checkbox_' + ${branchList.id}" th:type="${branch.attr_type}" th:value="${branchList.ip}" th:name="${branch.attr_name}"  class="filled-in chk-col-light-blue"  />
                <label th:for="'md_checkbox_' + ${branchList.id}"  th:text="${branchList.name}"></label>
            </li>

        </ul>
    </div>
 </div>
</div>

> фрагмент параграфа отчета HTML-шаблона

<ul  xmlns:th="http://www.thymeleaf.org" th:fragment="report_params">
    <li th:each="paramEntry : ${params}">
      <div th:include="${paramEntry.value} :: ${paramEntry.value}" th:with="ParamName=${paramEntry.key}">

      </div>


    </li>

</ul>

> фрагмент кода даты в шаблоне HTML-кода

<div class="col-2"  xmlns:th="http://www.thymeleaf.org" th:fragment="date_param">
    <div class="form-group" >
       <input  th:type="${date.attr_type}"  th:name="${date.attr_name}"  class="form-control"  />
    </div>
</div>

Я хочу передать переменную ParamName из параметров отчета в параметры ветви и даты, а затем использовать ParamName во фрагментахнапример, в ветке param

<div class="col-3"  xmlns:th="http://www.thymeleaf.org" th:fragment="branch_param">
     <div class="form-group" >
        <button type="button" id="dropdownUl" class="btn btn-info dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
            Select Branch
        </button>
        <div class="dropdown hide">
            <ul>
                <li th:each="branchList : ${ParamName.branchList}">
                    <input th:id = "'md_checkbox_' + ${branchList.id}" th:type="${branch.attr_type}" th:value="${branchList.ip}" th:name="${branch.attr_name}"  class="filled-in chk-col-light-blue"  />
                    <label th:for="'md_checkbox_' + ${branchList.id}"  th:text="${branchList.name}"></label>
                </li>

            </ul>
        </div>
     </div>
    </div>

1 Ответ

0 голосов
/ 29 января 2019

Это делается с помощью механизма предварительной обработки в Thymeleaf

Вот фрагмент того, что вы хотите сделать:

<li th:each="branchList : ${__${paramName}__.branchList}">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...