如何在Metawidget中添加与业务对象相关的操作?

时间:2010-03-21 17:04:03

标签: java jpa action

我使用Netbeans 6.8并尝试使用metawidget和JPA获取用户界面。我不能说

@Action
public void save( ActionEvent event )
{
    mSearchMetawidget.save();
}

当我添加以下导入时,此注释会出现“不兼容的类型”错误。

import org.metawidget.inspector.impl.actionstyle.Action;

怎么办?如何添加与我的用户实体相关的操作。我想做“注册”行动。 提前致谢

对Richard的反应

我认为@Action是一个Metawidget注释,由于导入错误而头疼。我现在得到它。我还需要添加swing库。 @Action注释属于SwingAppFramework。

实际上,我们希望从Metawidget自动提取的用户界面更新我们的数据库记录。我们已经创建了实体类,并且正在尝试修改它们以达到目的。我们如何对我们的用户界面类说,当按下按钮时,使用界面字段中输入的数据,记录会更新?

感谢。

对理查德的回复2

我想使用JPA的EntityManager。是否应该在按钮的动作侦听器中添加与EntityManager相关的代码?对于以下类,其侦听器是addUser()

我有一个实体类User.java

package datamodeldemo;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;
import org.metawidget.inspector.annotation.*;
import org.metawidget.inspector.annotation.UiAction;

import org.metawidget.inspector.commons.jexl.UiJexlAttribute;

@Entity
@Table(name="ShineeUser")
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name="USER_TYPE",
              discriminatorType= DiscriminatorType.STRING, length=20)

public class User implements Serializable
{

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="USER_ID", nullable = false)
    private Integer user_id;

    @Column(name="USER_NAME", nullable = false)
    private String user_name;

    @Column(name="PASSWORD", nullable = false)
    private String password;

    @Column(name="USER_TYPE")
    private UserType userType;

    @Column( name = "EMAIL")
    private String e_mail;

    @Column( name = "TELEPHONE")
    private String telephone;

    public enum UserType {customer, hotelAdmin, agencyAdmin};

    @UiHidden
    public Integer getId() {
        return user_id;
    }

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

    @UiComesAfter( "user_name" )
    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @UiComesAfter( "user_id" )
    public String getUser_name() {
        return user_name;
    }

    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }

    @UiComesAfter( "password" )
    public UserType getUserType() {
        return userType;
    }

    public void setUserType(UserType userType) {
        this.userType = userType;
    }
     @UiComesAfter( "userType" )
    public String getE_mail() {
        return e_mail;
    }

    public void setE_mail(String e_mail) {
        this.e_mail = e_mail;
    }
     @UiComesAfter( "e_mail" )
    public String getTelephone() {
        return telephone;
    }

    public void setTelephone(String telephone) {
        this.telephone = telephone;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (user_id != null ? user_id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof User)) {
            return false;
        }
        User other = (User) object;
        if ((this.user_id == null && other.user_id != null) ||
            (this.user_id != null && !this.user_id.equals(other.user_id))) {
                return false;
        }
        return true;
    }

    @Override
    public String toString()
    {
        return "datamodeldemo.User[id=" + user_id + "]";
    }

    @UiAction
    @UiJexlAttribute( name = "HIDDEN", expression = "this.user != null" )
    public void addUser()
    {
        //Database update???
    }
}

谢谢。

1 个答案:

答案 0 :(得分:0)

我相信你正在写错字。 org.metawidget.inspector.impl.actionstyle.Action是一个接口,而不是一个注释。我相信你的意思是:

@UiAction

当然,除非您打算使用SwingAppFramework @Action注释,否则您需要确保导入不会发生冲突。你应该使用:

@org.jdesktop.application.Action

希望有所帮助。

理查德。