1

デモ アプリケーションの開発。

エラー:プッシュ タグの下のプロパティを解決できません。名前と年齢

形:

<s:form action="addStudentAction" method="POST">
    <s:push value="student">
        <s:textfield name="name" label="Name : " value="" />
        <s:textfield name="age" label="Age : " value=""/>
    </s:push>
    <s:submit/>
</s:form>

アクション & モデル:

public class StudentAction extends ActionSupport implements ModelDriven {

    Student student = new Student();


    @Autowired
    StudentService studentService;

    public Object getModel() {
        return student;
    }

    public String execute(){
        return SUCCESS;
    }


    public String addStudent() throws Exception {
        student.setCreatedDate(new Date());
        studentService.add(student);
        return SUCCESS;
    }


    public Student getStudent() {
        return student;
    }

    public void setStudent(Student student) {
        this.student = student;
    }


}

package com.myapp.model;

import java.util.Date;

public class Student {

    private Long id;
    private String name;
    private Integer age;
    private Date createdDate;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Date getCreatedDate() {
        return createdDate;
    }

    public void setCreatedDate(Date createdDate) {
        this.createdDate = createdDate;
    }


}

編集済み

public class StudentAction extends ActionSupport implements ModelDriven<Student> {

    Student student = new Student();
    List<Student> studentList = new ArrayList<Student>();

    @Autowired
    StudentService studentService;

    public Student getModel() {
        return student;
    }

    public String execute(){
        return SUCCESS;
    }


    public String addStudent() throws Exception {
        student.setCreatedDate(new Date());
        studentService.add(student);
        return SUCCESS;
    }

}

まだプロパティは解決されていません。オプションを参照してください。model.name はプロパティを解決します。

jsp

**struts.xml**



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

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

            <action name="addStudentAction" class="com.myapp.action.StudentAction" method="addStudent">
                <result name="success" type="redirectAction">listStudentAction</result>
            </action>

            <action name="listStudentAction" class="com.myapp.action.StudentAction" method="listAllStudents">
                <result name="success">/pages/student.jsp</result>
            </action>

        </package>

    </struts>
4

1 に答える 1

4

プッシュは、レンダリング中に変数にアクセスするときに使用されます。あなたの場合、テキストフィールドの値を空に設定しています。プッシュ内で行っているのはそれだけなので、プッシュタグが何も役に立たないことは明らかです。

あなたが意図していると思うのは、ビューに学生を「プッシュ」することです。これは、「学生」を追加することと同じです。すべての変数に。これは push タグが行うことではありませんが、そのようなタグが有用であり、多くの入力を節約できる可能性があることは認めざるを得ません。アクションのターゲットがモデル駆動型を実装していることがわかります (モデルは学生です)。これにより、学生はすでにスタックの一番上に効果的にプッシュされているため、プッシュ タグを削除するだけで問題ありません。

以下がアドバイスです。

アクションには get/set Student があります... ModelDriven を実装している場合はそうすべきではありません。

クラス StudentAction は、おそらく AddStudentAction という名前にする必要があります。

addStudent メソッドを削除し、機能を execute() に移動する必要があります。

public String execute() throws Exception {
    student.setCreatedDate(new Date());
    studentService.add(student);
    return SUCCESS;
}

検証メソッドを実装する必要がありpublic void validate()ます (xml または注釈で実行している場合を除く)。

最後に、これは個人的な好みですが、ModelDriven を実装する場合は、次のようなタイプを指定すると役立ちますimplements ModelDriven<Student>(そうすれば、IDE は適切な getter/setter を作成することを認識できます)。

于 2012-10-01T04:08:08.893 に答える