2017-01-15 8 views
0

に呼び出されていない私は、簡単なフォームを投稿しよう:Struts2の:アクションのプロパティのセッターが

<s:form action="register"> 
<s:textfield name="lastname"></s:textfield> 
    <s:submit></s:submit> 
</s:form> 

アクション:

public class RegisterAction extends ActionSupport { 
    private String lastname; 
    public String execute() { 
     System.out.println("register"); 
    } 

    public String getLastname() { 
     return lastname; 
    } 

    public void setLastname(String lastname) { 
     this.lastname = lastname; 
    } 
} 

アクションは、レジスタ列を出力するが、セッターが呼び出されることはありません。

なぜセッターが呼び出されないのですか? ブラウザにアクションを直接入力しても、http://localhost:8686/register.action?lastname=sdjhセッターは呼び出されませんが、executeメソッドは "register"を出力します。

+0

実行はあなたPOST一度デフォルトで呼ばれています。登録措置を定義しましたか? getters/setterの名前をそれぞれgetLastNameとsetLastNameに変更してみてください。 –

+0

@NoelMurphy登録アクションは、ポスト(RegisterAction)に示されています。なぜ 'getLastname'の代わりに' getLastName'を使うのですか? – paolo

+0

Stuts2にはJavaに続く命名規則があり、規則に従わない限り、特定のゲッター/セッターは認識できません。 struts.xmlでアクションを定義しましたか?それ以外の場合は、アクションクラス(RegisterAction)にリダイレクトされ、executeメソッドが使用されます。あなたの行動の名前を変更してみてください。 –

答えて

0

コードに欠けている部分はありません。私は同じものを複製しようとしたが、それは完全に動作していることがわかった。以下は私のコードです。

web.xmlの

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> 
    <filter> 
    <filter-name>struts2</filter-name> 
    <filter-class> 
     org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 
    </filter-class> 
    </filter> 

    <filter-mapping> 
    <filter-name>struts2</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 
</web-app> 

struts.xml

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE struts PUBLIC 
     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 
     "http://struts.apache.org/dtds/struts-2.3.dtd"> 
<struts> 

    <constant name="struts.enable.DynamicMethodInvocation" value="false" /> 
    <constant name="struts.devMode" value="true" /> 

    <package name="default" namespace="/" extends="struts-default"> 

     <action name="register" class="com.tmp.RegisterAction"> 
      <result>one.jsp</result> 
     </action> 

    </package> 

</struts> 

index.jspを

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 
<%@ taglib prefix="s" uri="/struts-tags"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
</head> 
<body> 
    <s:form action="register"> 
     <s:textfield name="lastname"></s:textfield> 
     <s:submit></s:submit> 
    </s:form> 
</body> 
</html> 

のRegisterAction

package com.tmp; 

    import com.opensymphony.xwork2.Action; 
    import com.opensymphony.xwork2.ActionSupport; 


    public class RegisterAction extends ActionSupport { 

     private static final long serialVersionUID = 1L; 

     String      lastname; 


     public String getLastname() { 

      return lastname; 
     } 


     public void setLastname(String lastname) { 

      this.lastname = lastname; 
     } 


     @Override 
     public String execute() throws Exception { 

      // TODO Auto-generated method stub 
      return Action.SUCCESS; 
     } 
    } 

one.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%> 
    <%@ taglib prefix="s" uri="/struts-tags" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
</head> 
<body> 
<s:property value="lastname"/> 
</body> 
</html> 
関連する問題