2014-10-04 3 views
0

Кажется, что я не понимаю наследования. У меня есть эти классы: PicaAsset, VideoAsset, которые наследуются от имен классов Assets. Это активы класса декларации:Наследование + RPC GWT

public class Assets { 
protected int book=0; 
protected int fromChapter=0; 
protected int toChapter=0; 
protected int fromVerse=0; 
protected int toVerse=0; 
protected String creator=null; 
protected String discription=null; 
protected String source=null; 
protected String title=null; 
protected String duration=null; 
protected String url=null; 

public Assets(int book, int fromChapter, int toChapter, int fromVerse, 
     int toVerse, String creator, String discription, String source, 
     String title, String duration, String url) { 

    this.book = book; 
    this.fromChapter = fromChapter; 
    this.toChapter = toChapter; 
    this.fromVerse = fromVerse; 
    this.toVerse = toVerse; 
    this.creator = creator; 
    this.discription = discription; 
    this.source = source; 
    this.title = title; 
    this.duration = duration; 
    this.url = url; 
} 

public Assets() { 
} 

public int getBook() { 
    return book; 
} 

public void setBook(int book) { 
    this.book = book; 
} 
public int getFromChapter() { 
    return fromChapter; 
} 
public void setFromChapter(int fromChapter) { 
    this.fromChapter = fromChapter; 
} 
public int getToChapter() { 
    return toChapter; 
} 
public void setToChapter(int toChapter) { 
    this.toChapter = toChapter; 
} 
public int getFromVerse() { 
    return fromVerse; 
} 
public void setFromVerse(int fromVerse) { 
    this.fromVerse = fromVerse; 
} 
public int getToVerse() { 
    return toVerse; 
} 
public void setToVerse(int toVerse) { 
    this.toVerse = toVerse; 
} 
public String getCreator() { 
    return creator; 
} 
public void setCreator(String creator) { 
    this.creator = creator; 
} 
public String getDiscription() { 
    return discription; 
} 
public void setDiscription(String discription) { 
    this.discription = discription; 
} 
public String getSource() { 
    return source; 
} 
public void setSource(String source) { 
    this.source = source; 
} 
public String getTitle() { 
    return title; 
} 
public void setTitle(String title) { 
    this.title = title; 
} 
public String getDuration() { 
    return duration; 
} 
public void setDuration(String duration) { 
    this.duration = duration; 
} 
public String getUrl() { 
    return url; 
} 
public void setUrl(String url) { 
    this.url = url; 
} 

PicAsset:

public class PicAsset extends Assets implements IsSerializable { 

    private int picId=0; 

    public PicAsset(){ 
    } 

    public PicAsset(int picId, int book, int fromChapter, int toChapter, 
     int fromVerse, int toVerse, String creator, String discription, 
     String source, String title, String duration, String url) { 
    super( book, fromChapter, toChapter, 
      fromVerse, toVerse, creator, discription, 
      source, title, duration, url); 
    this.picId = picId; 
    } 

    public int getIdpic() { 
    return picId; 
    } 
    public void setIdpic(int idpic) { 
    this.picId = idpic; 
    } 
} 

Теперь я использую вызов RPC использовать методы, объявленные на стороне сервера, чтобы получить информацию от моего datbase, как вы можете увидеть метод возвращает список PicAsset, List.

rpcService.getPicture((books.getSelectedIndex()+1), (chapters.getSelectedIndex()+1), new AsyncCallback<List<PicAsset>>(){ 
        public void onFailure(Throwable caught) { 
         Window.alert("Can't connect to database" + books.getSelectedIndex() + chapters.getSelectedIndex()); 
        } 

        public void onSuccess(List<PicAsset> result) { 
         int listSize = result.size(); 
         int i; 
         int flag = 0; 

         assetPicPanel.clear(); 

          Label frameTitle = new Label("Pictures"); 
           for(i=0;i<listSize;i++) 
           { 
            if(flag == 0) 
            { 
             assetPicPanel.add(frameTitle); 
             flag = 1; 
            } 


            HorizontalPanel vPanelPic = new HorizontalPanel(); 

            System.out.print("heeeeey" +" " + result.get(i).getFromChapter());          
            Grid g = result.get(i).AssetGrid(result.get(i)); 

            vPanelPic.add(g); 
            assetPicPanel.add(vPanelPic); 
           } 
        } 
       }); 

Теперь, когда я напечатать ..get(). GetFromChapter() на стороне сервера, он приносит правильные значения. Но когда я печатаю значения, которые были возвращены вызову RPC, я получаю значения конструктора по умолчанию ... и не то, что нужно отправить назад.

Здесь также реализация getPicture на стороне сервера:

public List<PicAsset> getPicture(int book, int chapter) throws Exception 

{ 

    System.out.print("getPicture ok " + book +"," + chapter); 
    Connection conn = null; 
    PreparedStatement pstmt = null; 
    ResultSet result = null; 
    List<PicAsset> relevantAssets = new ArrayList<PicAsset>(); 
    PicAsset relAsset; 


    try { 
     conn = getConnection(); 
     pstmt = conn.prepareStatement("SELECT * FROM picasset WHERE book = ? AND fromChapter <= ? AND toChapter >= ?"); 

     //System.out.print("connection" + conn); 
     pstmt.setInt(1, book); 
     pstmt.setInt(2, chapter); 
     pstmt.setInt(3, chapter); 

     result = pstmt.executeQuery(); 

     // System.out.print(result); 
     while (result.next()) { 

      //System.out.print("in while"); 
      relAsset = new PicAsset(result.getInt("picId"),result.getInt("book"), result.getInt("fromChapter"), result.getInt("toChapter"),result.getInt("fromVerse"),result.getInt("toVerse"),result.getString("creator"),result.getString("discription"),result.getString("source"),result.getString("title"),result.getString("duration"),result.getString("url")); 
      relevantAssets.add(relAsset); 

     } 
    } 

     catch (SQLException sqle) 
     { 
      sqle.printStackTrace(); 
     } 
     finally 
     { 
      // Cleanup 
      result.close(); 
      pstmt.close(); 
      conn.close(); 
     } 

    System.out.print("In MySql get Chapter " + relevantAssets.get(0).getFromChapter() + " " + relevantAssets.get(0).getIdpic()); 
    return relevantAssets; 
} 

ответ

0

В GWT RPC было бы гораздо лучше использовать сырые массивы, а не интерфейсы сбора - возврат из метода вместо PicAsset [] Список. Это позволит вам (а) решить вашу проблему и (б) избежать ненужных классов для компиляции в код клиента.

раздел

См «Сырые Типы» в gwtproject.org

+1

Там нет ничего плохого с помощью коллекции, до тех пор, пока вы используете конкретную реализацию, как '' ArrayList . –

+0

Я думаю, что это проблема наследования, я что-то пропустил здесь, и я не знаю, что это такое ... Если я удалю класс Asset и реализую все в классе Picassset, возвращаемые значения будут в порядке. Но я не хочу дублировать код ... –

+0

Попробуйте переместить IsSerializable в родительский класс и/или заменить его на Serializable JDK. – ursa