当前位置: 首页 > 知识库问答 >
问题:

当其中一个字段不是字符串而是另一个对象时,如何用Spring MVC提交表单?

韩乐湛
2023-03-14
    <form:form method="post" action="addNewWord.html" commandName="word" >

    <table>


    //many other fields;    


        <tr>
            <td>Category:</td>
            <td><form:select path="category" items="${CATEGORIES}"
                    var="cat">
                </form:select></td>
            <td><form:errors path="category" cssClass="error" /></td>
        </tr>


        <tr>
            <td colspan="2"><input type="submit" value="Add new word" /></td>
        </tr>
    </table>

</form:form>
@Entity
@Table(name = "word")
public class Word {

    //other instance variables either primitives or Strings;

    @Column(name = "category", nullable = false, length = 80)
    private String  category;
        //getters-setters 
    @ManyToOne
@JoinColumn(name = "category_id")
private Category category;

我应该如何修改.jsp文件上的表单以提交包含不是字符串而是类别的字段的word对象?就整个情况而言,让我展示由提交调用的控制器中的方法:

@RequestMapping(value = "/addNewWord", method = RequestMethod.POST)
public String addNewWord(@ModelAttribute Word word, BindingResult result, Model model) {
    WordValidator validator = new WordValidator();
    validator.validateWord(word, result, wordService.getAllWord(), categoryService.getAllCategories());
    if (!result.hasErrors()) {
        wordService.save(word);
        word.clearValues();
    }
    fillCategoryNames(model);
    return "addNew";
}

我有一种感觉,我应该使用@InitBinder方法,但我不知道如何使用,这更像是一种感觉,而不是坚如磐石的事实。欢迎任何建议。

共有1个答案

漆雕疏珂
2023-03-14

给你:

public class CategoryEditor extends PropertyEditorSupport {

    // Converts a String to a Category (when submitting form)
    @Override
    public void setAsText(String text) {
        Category c = new Category();
        c.setName(text);
        this.setValue(c);
    }

    // Converts a Category to a String (when displaying form)
    @Override
    public String getAsText() {
        Category c = (Category) this.getValue();
        return c.getName();
    }

}

而且

...
public class MyController {

    @InitBinder
    public void initBinder(WebDataBinder binder) {
        binder.registerCustomEditor(Category.class, new CategoryEditor());
    }

    ...

}

Fore更多信息:

    null
 类似资料:
  • 我在编写HQL查询时遇到困难,无法从我的案例实体中仅选择案例ID、标题和案例状态字段。返回的病例必须根据病例ID进行区分。我不希望包含名称和用户ID字段。我也不想对caseid、title和caseStatus字段使用延迟抓取。请注意,案例状态字段是一对多列表。以下是实体。为了节省空间,省略了getter/setter。 我的目标是检索一个不同的

  • 例如: 字符串1=helloworld字符串2=asdfuvjerhelloworld 这应该是真的。 另一个例子:字符串1=helloworld字符串2=lshewodxzr 这也应该是真的。 所以我正在研究如何创建一个方法,它将返回一个布尔值,检查第二个字符串是否包含第一个字符串中的字母。在第二个示例中,string2只有一次字母l,尽管字母l在string1中出现了三次,但仍然返回true。

  • 问题内容: 我在想出可以验证JSON是否包含以下任一内容的JSON模式时遇到了麻烦: 仅一个字段 仅另一个领域 (其他两个字段之一) 但如果存在多个则不匹配。 具体来说,我要 和/或 进行验证,但我不想接受更多的验证。 这是到目前为止我得到的: 这比我想要的要匹配。我希望它符合以下所有条件: 但不符合: 我猜想我有明显的失踪-我想知道它是什么。 问题答案: 问题是“非”语义。“不需要”不表示“禁止

  • 问题内容: 基本上,我有一堆数据,其中第一列是字符串(标签),其余列是数值。我运行以下命令: 这样可以很好地读取大多数数据,但是label列只是获取“ nan”。我该如何处理? 问题答案: 默认情况下,使用:这就是将字符串列转换为NaN的原因,因为毕竟它们不是数字… 您可以使用以下方法来尝试猜测列的实际类型: 您可以使用它们的名称访问列,例如… 如果您不知道列应该是什么,那么使用是一个好技巧。如果

  • 问题内容: 在代码中检查的子字符串是: 但是我该如何在Swift中做到这一点? 问题答案: 您可以使用Swift进行完全相同的调用: Swift 4和Swift 5 在Swift 4中,String是值的集合,在Swift 2和3中并不是这样,因此您可以使用以下更简洁的代码1: 迅捷3.0+ 较早的斯威夫特 我希望这是一个有用的解决方案,因为包括我在内的某些人通过致电遇到了一些奇怪的问题。1个 P

  • 在中,检查中的子字符串的代码是: 但我如何在Swift中做到这一点呢?