Как вызвать другой метод в методе установки класса pojo [приложение для загрузки файла сессии] Hibernate и Struts 2 - PullRequest
0 голосов
/ 23 февраля 2012

Привет, друзья! Я занимаюсь разработкой веб-приложения, которое использует hibernate и struts2.я создаю фотоальбом, я успешно сделал это без использования Hibernate, но с Hibernate у него возникают проблемы при вставке в базу данных.модуль работает так, как только загруженный файл вставит FileName, Contenttype, id, и он также предполагает вставку содержимого файла изображения (byte []), но в табличном значении отображается значение Null ... мой код выглядит следующим образом...

@Entity
@Table(name="PHOTOALBUM")
public class User implements Serializable  {
@Id
@GeneratedValue
@Column(name="PHOTO_ID")
    private Long id;

@Column(name="IMAGE")
private byte[] Image;


@Column(name="CONTENT_TYPE")
    private String userImageContentType;

@Column(name="PHOTO_NAME")
    private String userImageFileName;

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

            public String getUserImageFileName() {
        return userImageFileName;
    }

    public void setUserImageFileName(String userImageFileName) {
        this.userImageFileName = userImageFileName;
    }

            public String getUserImageContentType() {
        return userImageContentType;
    }

    public void setUserImageContentType(String userImageContentType) {
        this.userImageContentType = userImageContentType;
    }

public byte[] getImage() {
        return Image;
    }

    public void setImage(byte[] Image) {
        Image=Change(this.getUserImage());
        this.Image = Image;
    }

    @Transient
    private File userImage;

    public File getUserImage() {
        return userImage;
    }

    public void setUserImage(File userImage) {
        this.userImage = userImage;
    }

    public byte[] Change(File userImage)
    {
       // userImage=this.getUserImage();
       // String name=userImage.getName();
       // long len=userImage.length();

        byte[] bFile = new byte[(int) userImage.length()];
        try {

        FileInputStream fileInputStream = new FileInputStream(userImage);
    fileInputStream.read(bFile);
    fileInputStream.close();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
       // System.out.println("The Name Of File In Pojo Class Is:="+ name);
        //System.out.println("The Length Of File In Pojo Class Is:="+ len);
        //System.out.println("The Content Of File In Pojo Class Is:="+ bFile);
        return bFile;
    }

}

и я сохраняю такие значения, как это

 public class UserDAOImpl implements UserDAO {

@SessionTarget
Session session;

@TransactionTarget
Transaction transaction;

/**
 * Used to save or update a user.
 */
@Override
public void saveOrUpdateUser(User user) {
    try {
        session.saveOrUpdate(user);
    } catch (Exception e) {
        transaction.rollback();
        e.printStackTrace();
    }
}

/**
 * Used to delete a user.
 */
@Override
public void deleteUser(Long userId) {
    try {
        User user = (User) session.get(User.class, userId);
        session.delete(user);
    } catch (Exception e) {
        transaction.rollback();
        e.printStackTrace();
    } 
}

/**
 * Used to list all the users.
 */
@SuppressWarnings("unchecked")
@Override
public List<User> listUser() {
    List<User> courses = null;
    try {
        courses = session.createQuery("from User").list();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return courses;
}

/**
 * Used to list a single user by Id.
 */
@Override
public User listUserById(Long userId) {
    User user = null;
    try {
        user = (User) session.get(User.class, userId);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return user;
}

}

отображение действий Struts происходит следующим образом ...

 \<package name="default" extends="hibernate-default">
<action name="saveOrUpdateUser"method="saveOrUpdate"class="com.srikanth.web.UserAction">
        <result name="success" type="redirect">listUser</result>
    </action>
    <action name="listUser" method="list" class="com.srikanth.web.UserAction">
        <result name="success">/register.jsp</result>
    </action>
    <action name="editUser" method="edit" class="com.srikanth.web.UserAction">
        <result name="success">/register.jsp</result>
    </action>
    <action name="deleteUser" method="delete" class="com.srikanth.web.UserAction">
        <result name="success" type="redirect">listUser</result>
    </action>
</package>

jsp выглядит следующим образом

 \<s:form action="saveOrUpdateUser">
<s:push value="user">
    <s:hidden name="id" />
    <s:file name="userImage" label="User Image" />
            <s:submit />
</s:push>
 </s:form>
 <s:iterator value="userList" status="userStatus">
        <s:property value="id" />
            <s:property value="userImageFileName" />
            <s:property value="userImageContentType" />
            <img src='<s:property value="userImage" />' alt"" />
            <s:url id="deleteURL" action="deleteUser">
                <s:param name="id" value="%{id}"></s:param>
            </s:url> <s:a href="%{deleteURL}">Delete</s:a>
    </s:iterator>

Я пытаюсь вызвать метод Change, чтобы он преобразовал файл в byte [] и сохранил его в переменной изображения byte [] с помощью setter, но он не работает ...Пожалуйста, помогите мне с этим ..... заранее спасибо

1 Ответ

0 голосов
/ 23 февраля 2012

Согласно моему пониманию вопроса, проблема заключается только в вставке файла в таблицу.Скопируйте и вставьте метод Change () в класс com.srikanth.web.UserAction, так как вы используете это действие для каждой транзакции БД.Используйте метод Change () перед тем, как вставлять / обновлять в БД.

Например:

public class UserAction extends ActionSupport{
   //variable to get file from jsp
   private File uploadedImage;
    .....
   //setters & getters for uploadedImage


@Override
public String gsexecute() throws Exception {

   User user = new User();

   //set image value as byteArray
   user.setImage(Change(uploadedImage));

   //insert or update DB here

    return SUCCESS;
}

 public byte[] Change(File userImage)
   {
   // userImage=this.getUserImage();
   // String name=userImage.getName();
   // long len=userImage.length();

    byte[] bFile = new byte[(int) userImage.length()];
    try {

    FileInputStream fileInputStream = new FileInputStream(userImage);
fileInputStream.read(bFile);
fileInputStream.close();
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
   // System.out.println("The Name Of File In Pojo Class Is:="+ name);
    //System.out.println("The Length Of File In Pojo Class Is:="+ len);
    //System.out.println("The Content Of File In Pojo Class Is:="+ bFile);
    return bFile;
   }

 }

И убедитесь, что столбец таблицы должен поддерживать вставку байтового массива.Пример: использовать тип столбца BLOB для MYSQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...