【问题标题】:Populate value A with value from variable B in Thymeleaf用 Thymeleaf 中变量 B 的值填充值 A
【发布时间】:2021-01-10 23:55:56
【问题描述】:
   @RequestMapping("/new") 
        public String addNewClient(Model model) {
            
            UserForAdmin userForAdmin = new UserForAdmin();
            
            model.addAttribute("userForAdmin", userForAdmin);
            
            return "new";



    @PostMapping("/save")
        public String saveClient(@ModelAttribute("userForAdmin") UserForAdmin userForAdmin) {
            
             userForAdminService.save(userForAdmin);
             
             return "redirect:/";   
        }
      






new.html
 <form action="#" th:action="@{/save}" th:object="${userForAdmin}"
            method="post">
 
            <table border="0" cellpadding="10">
                <tr>
                    <td>First Name:</td>
                    <td><input type="text" th:field="*{firstName}" /></td>
                </tr>
                <tr>
                    <td>Last Name:</td>
                    <td><input type="text" th:field="*{lastName}" /></td>
                </tr>
                <tr>
                    <td>Phone:</td>
                    <td><input type="text" th:field="*{phone}" /></td>
                </tr>
                <tr>
                    <td>Package:</td>
                    <td> <select th:field="*{packages}">
                        <option th:value="'10'" th:text="10"></option>
                        <option th:value="'5'" th:text="5"></option>
                        <option th:value="'3'" th:text="3"></option>
                    </select> </td>
         
                <tr>
                    <td>Session left:</td>
                    <td th:field="*{sessionleft}" th:value="*{packages}">  </td>
                </tr> 
           

我正在添加新用户,我有包含包的下拉列表:10、5 或 3。一切都很好,在我的索引页面上我检索了我选择的内容。但我还想从我的会话数量的下拉列表中设置值。所以例如在选择包10时,我想自动设置左10 。所以我选择了一个地方并在数据库中填充了两个值。我试过 th:value="*{packages}" 但它不起作用。

【问题讨论】:

    标签: java spring jpa thymeleaf


    【解决方案1】:

    我不清楚您要问什么,但如果您要预先填写表格,那么我可以为您提供帮助。您可以使用内联 javascript 重新填充表单。方法如下:

                   <select id="value" onClick="change()" th:field="*{packages}">
                          <option th:value="10" th:text="10"></option>
                          <option th:value="5" th:text="5"></option>
                          <option th:value="3" th:text="3"></option>
                   </select> 
    
                     <tr >
                        <td >Session left:</td>
                        <input id="session" type='text' >//I have used input for testing purpose only, you can change accordingly
                    </tr>
    
                  <script th:inline="javascript">
                    function change(){
                        let value=document.getElementById("value").value;
                        console.log(value);
                        document.getElementById('session').value=value;
                    }
                
                 </script>
    

    让我知道这是否有效。

    【讨论】:

    • 我需要在没有 js 的情况下这样做。所以我会尝试更好地解释我的问题。我有 index.html,其中有我的新用户列表。当我在 new.html 上时,我想创建一个新用户(这里一切正常)。但是当我为这个用户选择包时(例如包'10'),我想在我的列中自动获取这个包的值:会话离开。因此,由于我在包下拉列表中的选择,我希望在包列和会话左列中获得相同的值。感谢您的回答:)
    • 好的,所以您想使用 userForAdmin 实体获取数据库的 packages 列中的值吗?您是否在 sessionleft 字段中获得了值?。
    • 不不,由于我在下拉列表中的选择,我想在我的包列和 sessionleft 列中获得相同的值。例如,我点击了 value='10',我想用我选择的包创建我的新用户并自动设置 sessionleft。 (现在我正确检索了我选择的包,但 sessionleft 为 NULL)
    • 好的,我明白了。但是为了帮助您,我可能需要您的整个项目,但在此之前尝试在您的所有选项标签中添加 th:field="*{sessionleft}" ,如下所示: 让我知道这是否有效。
    • 这是个好主意,但我收到了这个错误:(“如果指定(不是必需的),“选项”标签中的属性“{th:field,data-th-field}”必须有与包含“选择”标签的值完全相同
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 2021-01-02
    • 2014-08-20
    • 2016-06-24
    • 1970-01-01
    相关资源
    最近更新 更多