2017-08-13 7 views
0

私はThymeleafのフォームを持っていますが、これはユーザーからデータを受け取ります。それは次のようになります。Thymleafフォーム提出の結果は404ですか?

\t <h1>Form</h1> 
 
    <form action="#" th:action="@{/addArticle}" th:object="${article}" method="post"> 
 
    \t <p>Id: <input type="text" th:field="*{id}" /></p> 
 
     <p>Message: <input type="text" th:field="*{title}" /></p> 
 
     <p>Message: <input type="text" th:field="*{authors}" /></p> 
 
     <p>Message: <input type="text" th:field="*{genre}" /></p> 
 
     <p>Message: <input type="text" th:field="*{content}" /></p> 
 
     <p>Message: <input type="text" th:field="*{date}" /></p> 
 
     <p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p> 
 
    </form>

問題は、私は、このフォームを送信するたびに、それはモンゴデータベースに保存したり、結果のページが表示されません、です。代わりに、それは404がスローされます私は、このエラーはURLから来ていることに気づく:私は、私が呼ばれているページにリダイレクトしようとしているので、

http://localhost:8080/addArticle

これは、奇妙ですreturn.html (正しいディレクトリに存在し、htmlが有効であることをテストしました)。これは私のコントローラである:

>@Controller 
@RequestMapping("/articles") 
public class ArticleController { 

    private ArticleRepo articleRepo; 

    @Autowired 
    public ArticleController(ArticleRepo articleRepo) { 
     this.articleRepo = articleRepo; 
    } 

    @RequestMapping(value = "/findAll", method = RequestMethod.GET) 
    @ResponseBody 
    public List<Article> findall() { 
     return articleRepo.findAll(); 
    } 

    @GetMapping("/addArticle") 
    public String getAddArticle(Model model) { 
     model.addAttribute("article", new Article()); 
     return "submitAnArticle"; 
    } 

    @PostMapping("/addArticle") 
    public String submitAddArticle(@ModelAttribute Article newArticle) { 
     articleRepo.save(newArticle); 
     return "result"; 
    } 


} 

私は、スタックオーバーフローを閲覧し、参考のためにthis春のドキュメントを使用してみましたが、私はこだわっています。

最も重要な質問 1.誰でもこのフォームを動作させることができますか、おそらくこのエラーを特定できますか?

ボーナスの質問 2.私はThymeleafの変わったフォームのものに切り替える前に、すでにこれをJavascriptで正常に処理していました。とにかく私はちょうどここからデータを取って、以前使っていたようにJavaScriptに入れてもいいですか?私は標準のHTMLフォームのものを使ってみましたが、何もしません。 3. AJAX経由でページをリダイレクトせずにこれを行う方法はありますか?

一貫してupvotedされているので、私は質問がスタックオーバーフローをぶち壊しているようですが、どちらかが間違った応答か全くありません。これに関する助けがあれば大いに感謝します。

マッピングを見て
+0

_アプリケーション全体を提供していない限り、誰もこのフォームを動作させることができますか?それは起こりそうもなく、この質問は話題には余りにも広すぎます。問題を示す[mcve]を提供できる場合は、多分私たちを助けることができます。 –

答えて

3

サンプルそれは確かに404エラーをスローするでしょう。お使いのコントローラでは、あなたはので、あなたのURLが

http://localhost:8080/articles/addArticle 

なります

@RequestMapping("/articles") 
public class ArticleController 

@PostMapping("/addArticle") 
public String submitAddArticle(@ModelAttribute Article newArticle) { 

に二回マッピングされていますが、

http://localhost:8080/addArticle 
+0

...これをどうやって解決しますか? – DaveCat

+1

これを試してください。あなたのフォームでは、コントローラから '@RequestMapping("/articles ")を削除するように、':action = "@ {/ addArticle}" ''を ':action =" @ {/ articles/addArticle} – budthapa

2

、あなたのURL http://localhost:8080/articles/addArticleではないことは、アクションから「/」を削除してみてください:?

th:action="@{addArticle}"

そうでない場合、これはルートすなわちから服用するURLを引き起こす可能性があります:

http://localhost:8080/addArticle 

はEDIT:はまた、あなたは次のように述べている。

私は私はあなたがresultを戻ってきている

return.htmlが、あなたのコントローラで呼ばれているページにリダイレクトしようとしているので、それを変更してみてください:あなたのコードに基づいて

@PostMapping("/addArticle") 
public String submitAddArticle(@ModelAttribute Article newArticle) { 
    articleRepo.save(newArticle); 
    return "return"; 
} 
+0

これは間違いなく正しいURLに移動しますが、それでも404と表示されます。 私が気づいたのは、エラーが真に404ではない場合でも、Thymeleafは404をかなり頻繁にスローします。たとえば、ページのhtmlがそれがThymeleafに認識されるようにフォーマットされていれば、それはただ404を投げてしまいますが、問題の行をドキュメント内に表示します。 – DaveCat

+0

私の編集を見て –

+0

それは私の部分のタイプミスでした。私は "結果"を返そうとしているし、それをやっていない。 – DaveCat

0

Iに投稿しようとしていますあなたが必需品を輸入しないかもしれないと思うこれらをpom.xmlに入れてください。または、あなた自身でダウンロードしてください。

<dependency> 
     <groupId>nz.net.ultraq.thymeleaf</groupId> 
     <artifactId>thymeleaf-layout-dialect</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>net.sourceforge.nekohtml</groupId> 
     <artifactId>nekohtml</artifactId> 
    </dependency> 
関連する問題