Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring应用程序:使用@Model属性将表单对象解析到控制器时出现问题。错误org.attoparser.ParseException:字段 <!DOCTYPE html> <html lang="en&qu_Java_Spring Mvc_Model_Thymeleaf_Modelattribute - Fatal编程技术网

Java Spring应用程序:使用@Model属性将表单对象解析到控制器时出现问题。错误org.attoparser.ParseException:字段 <!DOCTYPE html> <html lang="en&qu

Java Spring应用程序:使用@Model属性将表单对象解析到控制器时出现问题。错误org.attoparser.ParseException:字段 <!DOCTYPE html> <html lang="en&qu,java,spring-mvc,model,thymeleaf,modelattribute,Java,Spring Mvc,Model,Thymeleaf,Modelattribute,Spring应用程序:使用@Model属性将表单对象解析到控制器时出现问题。错误org.attoparser.ParseException:字段 <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org"> <head>

Spring应用程序:使用@Model属性将表单对象解析到控制器时出现问题。错误org.attoparser.ParseException:字段
    <!DOCTYPE html>
    <html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org">
        <head>
            <meta charset="utf-8">
            <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    
            <link rel="stylesheet" type="text/css" media="all" th:href="@{/css/bootstrap.min.css}">
    
            <title>Home</title>
        </head>
        <body class="p-3 mb-2 bg-light text-black">
            <div class="container">
                <div id="logoutDiv">
                    <h1 th:text="${'Welcome ' + name}">Name</h1>
                    <form action="#" th:action="@{/logout}"method="POST">
                        <button type="submit" class="btn btn-secondary float-right">Logout</button>
                    </form>
                </div>
                <div id="contentDiv" style="clear: right;">
                    <nav style="clear: right;">
                        <div class="nav nav-tabs" id="nav-tab" role="tablist">
                            <a class="nav-item nav-link active" id="nav-files-tab" data-toggle="tab" href="#nav-files" role="tab" aria-controls="nav-files" aria-selected="true">Files</a>
                            <a class="nav-item nav-link" id="nav-notes-tab" data-toggle="tab" href="#nav-notes" role="tab" aria-controls="nav-notes" aria-selected="false">Notes</a>
                            <a class="nav-item nav-link" id="nav-credentials-tab" data-toggle="tab" href="#nav-credentials" role="tab" aria-controls="nav-credentials" aria-selected="false">Credentials</a>
                        </div>
                    </nav>Upload<
                    <div class="tab-content" id="nav-tabContent">
                        <div class="tab-pane fade show active" id="nav-files" role="tabpanel" aria-labelledby="nav-files-tab">
                            <p th:text="${message}" th:if="${message ne null}" class="alert alert-primary"></p>
                            <form action="#" enctype="multipart/form-data" th:action="@{'/file/uploadFile'}" th:method="POST" >
                                <div class="container">
                                    <div class="row" style="margin: 1em;">
                                        <div class="col-sm-2">
                                            <label for="fileUpload">Upload a New File:</label>
                                        </div>
                                        <div class="col-sm-6">
                                            <input type="file" class="form-control-file" id="fileUpload" name="fileUpload">
                                        </div>
                                        <div class="col-sm-4">
                                            <button type="submit" class="btn btn-dark">/button>
                                        </div>
                                    </div>
                                </div>
                            </form>
                            <div class="table-responsive">
                                <table class="table table-striped" id="fileTable">
                                    <thead>
                                        <tr>
                                            <th style="width: 20%" scope="col"></th>
                                            <th style="width: 80%" scope="col">File Name</th>
                                        </tr>
                                    </thead>
                                    <tbody>
                                    <tr th:each="file : ${files}">
                                        <td>
                                            <a target="_blank" class="btn btn-success"  th:href="@{/file/{filename}(fileName = ${file.filename})}">View</a>
                                            <a class="btn btn-danger" th:href="@{/file/delete{filename}(filename = ${file.filename})}" >Delete</a>
                                        </td>
                                        <th scope="row" th:text="${file.filename}" ></th>
                                    </tr>
                                    </tbody>
                                </table>
                            </div>
                        </div>
                        <div class="tab-pane fade" id="nav-notes" role="tabpanel" aria-labelledby="nav-notes-tab">
                            <button style="margin: 0.25em;" type="button" class="btn btn-info float-right" onclick="showNoteModal()">
                                + Add a New Note
                            </button>
                            <div class="table-responsive">
                                <table class="table table-striped" id="userTable">
                                    <thead>
                                    <tr>
                                        <th style="width: 20%" scope="col"></th>
                                        <th style="width: 20%" scope="col">Title</th>
                                        <th style="width: 60%" scope="col">Description</th>
                                    </tr>
                                    </thead>
                                    <tbody>
                                    <tr th:each="note : ${notes}">
                                        <td>
                                            <button id="edit-note" type="button" class="btn btn-success"
                                                    th:attr="data-id=${note.getNoteId},
                                                    data-title=${note.getNoteTitle},
                                                    data-description=${note.getNoteDescription}"
                                                    onclick="showNoteModal (this.getAttribute('data-id'),this.getAttribute('data-title'),this.getAttribute('data-description'))">Edit/View</button>
                                            <a id="delete-note" class="btn btn-danger" th:href="@{/note/delete/{noteId}(noteId = ${note.getNoteId()})}">Delete</a>
                                        </td>
                                        <th  id="notetitle" scope="row" th:text="${note.getNoteTitle()}">Example Title</th>
                                        <td id="notedescription" th:text="${note.getNoteDescription()}">Example Description </td>
                                    </tr>
                                    </tbody>
                                </table>
                            </div>
    
                            <div class="modal fade" id="noteModal" tabindex="-1" role="dialog" aria-labelledby="noteModalLabel" aria-hidden="true">
                                <div class="modal-dialog" role="document">
                                    <div class="modal-content">
                                        <div class="modal-header">
                                            <h5 class="modal-title" id="noteModalLabel">Note</h5>
                                            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                                                <span aria-hidden="true">&times;</span>
                                            </button>
                                        </div>
                                        <div class="modal-body">
    -Here is the error that I get-
                                            <form action="#" method="POST" th:action="@{/note/add}" th:object="${Notes}">
                                                <input type="hidden" name="noteId" id="note-id">
                                                <div class="form-group">
                                                    <label for="note-title" class="col-form-label">Title</label>
                                                    <input type="text" name= "noteTitle" class="form-control" id="note-title"  maxlength="20" required th:field="*{noteTitle}">
                                                </div>
                                                <div class="form-group">
                                                    <label for="note-description" class="col-form-label">Description</label>
                                                    <textarea class="form-control" name="noteDescription" id="note-description" rows="5" maxlength="1000" required th:field="*{noteDescription}"></textarea>
                                                </div>
                                                <button id="noteSubmit" type="submit" class="d-none"></button>
                                            </form>
                                        </div>
                                        <div class="modal-footer">
                                            <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                                            <button type="button" class="btn btn-primary" onclick="$('#noteSubmit').click();">Save changes</button>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="tab-pane fade" id="nav-credentials" role="tabpanel" aria-labelledby="nav-credentials-tab">
                            <button style="margin: 0.25em;" type="button" class="btn btn-info float-right" onclick="showCredentialModal()">
                                + Add a New Credential
                            </button>
    
                            <div class="table-responsive">
                                <table class="table table-striped" th:object="${credentials}" id="credentialTable">
                                    <thead>
                                        <tr>
                                            <th style="width: 20%" scope="col"></th>
                                            <th style="width: 35%" scope="col">URL</th>
                                            <th style="width: 20%" scope="col">Username</th>
                                            <th style="width: 25%" scope="col">Password</th>
                                        </tr>
                                    </thead>
                                    <tbody>
                                    <tr>
                                        <td>
                                            <button type="button" class="btn btn-success">Edit</button>
                                            <a class="btn btn-danger">Delete</a>
                                        </td>
                                        <th scope="row">Example Credential URL</th>
                                        <td>Example Credential Username</td>
                                        <td>Example Credential Password</td>
                                    </tr>
                                    </tbody>
                                </table>
                            </div>
    
                            <div class="modal fade" id="credentialModal" tabindex="-1" role="dialog" aria-labelledby="credentialModalLabel" aria-hidden="true">
                                <div class="modal-dialog" role="document">
                                    <div class="modal-content">
                                        <div class="modal-header">
                                            <h5 class="modal-title" id="credentialModalLabel">Credential</h5>
                                            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                                                <span aria-hidden="true">&times;</span>
                                            </button>
                                        </div>
                                        <div class="modal-body">
                                            <form action="#" method="POST">
                                                <input type="hidden" name="credentialId" id="credential-id">
                                                <div class="form-group">
                                                    <label for="note-title" class="col-form-label">URL</label>
                                                    <input type="text" name= "url" class="form-control" id="credential-url" maxlength="100" required>
                                                </div>
                                                <div class="form-group">
                                                    <label for="note-title" class="col-form-label">Username</label>
                                                    <input type="text" name= "username" class="form-control" id="credential-username" maxlength="30" required>
                                                </div>
                                                <div class="form-group">
                                                    <label for="note-title" class="col-form-label">Password</label>
                                                    <input type="text" name= "password" class="form-control" id="credential-password" maxlength="30" required>
                                                </div>
                                                <button id="credentialSubmit" type="submit" class="d-none"></button>
                                            </form>
                                        </div>
                                        <div class="modal-footer">
                                            <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                                            <button type="button" class="btn btn-primary" onclick="$('#credentialSubmit').click();">Save changes</button>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
    
            <script th:src="@{/js/jquery-slim.min.js}"></script>
            <script th:src="@{/js/popper.min.js}"></script>
            <script th:src="@{/js/bootstrap.min.js}"></script>
    
            <!--For opening the note modal-->
            <script type="text/javascript">
                // For opening the note modal
                function showNoteModal(noteId, noteTitle, noteDescription) {
                    $('#note-id').val(noteId ? noteId : '');
                    $('#note-title').val(noteTitle ? noteTitle : '');
                    $('#note-description').val(noteDescription ? noteDescription : '');
                    $('#noteModal').modal('show');
                }
    
                // For opening the credentials modal
                function showCredentialModal(credentialId, url, username, password) {
                    $('#credential-id').val(credentialId ? credentialId : '');
                    $('#credential-url').val(url ? url : '');
                    $('#credential-username').val(username ? username : '');
                    $('#credential-password').val(password ? password : '');
                    $('#credentialModal').modal('show');
                }
            </script>
        </body>
    </html>


-I get an error when trying to parse the Note Form into my Note Controller. I try to parse my model object Notes in the form in my HTML home form into the Controller but it can not except the fields from the form.  My first error is this: 
--- Note Controller ---

@Controller
@RequestMapping("note")
public class NoteController {



    private NoteService noteServices;
    private UserService userService;


    public NoteController(NoteService noteServices, UserService userService) {
        this.noteServices = noteServices;
        this.userService = userService;
    }

    // Add an new note
    
    @PostMapping("add")
    public String addNote(@ModelAttribute(value="Notes")Notes Notes, Authentication authentication, Model model) throws IOException {
        String userName = authentication.getName();
        User user = userService.getUser(userName);
        Integer userid = user.getId();



        if(Notes.getNoteId() == null){
            noteServices.addNote(Notes,userid);
        }else{
            noteServices.editNote(Notes);

        }


        return "result";

    }


    @GetMapping("/delete/{noteId:.+}")
    public String deleteNote(@PathVariable Integer noteId, Authentication authentication, RedirectAttributes redirectAttributes){
        noteServices.deleteNote(noteId);
        redirectAttributes.addFlashAttribute("deleteNoteSuccess","Note deleted successfully.");
        return "redirect:/result";
    }

    private Integer getUserId(Authentication authentication) {
        String userName = authentication.getName();
        User user = userService.getUser(userName);
        return user.getId();
    }




}


---


--- POJO Model ---

public class Notes  {

    private Integer noteId;
    private String noteTitle;
    private String noteDescription;
    private Integer userId;


    public Notes(String noteTitle, String noteDescription, Integer userId) {
        this.noteTitle = noteTitle;
        this.noteDescription = noteDescription;
        this.userId = userId;
    }


    public Integer getNoteId() {
        return noteId;
    }

    public void setNoteId(Integer noteId) {
        this.noteId = noteId;
    }

    public String getNoteTitle() {
        return noteTitle;
    }

    public void setNoteTitle(String noteTitle) {
        this.noteTitle = noteTitle;
    }

    public String getNoteDescription() {
        return noteDescription;
    }

    public void setNoteDescription(String noteDescription) {
        this.noteDescription = noteDescription;
    }

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

}