Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с JSP 
:(
    Опции темы
iliot
Дата 15.11.2006, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 15.11.2006

Репутация: нет
Всего: нет



Приветствую!

Я работаю в JBuilder 2005/TomCat 5.5.9. Написал простенький тестовый JSP+два Been-a. Один  бин абстрактный, и второй соответственно его расширяет. В JSP импортнул пакет с бинами, попытался стандартно применить полиморфизм(вроде так называется smile ) для вызова метода второго бина, но обломился =)
 
Пример:
package x
abstact class JBeen1{
protected a1
protected a2
}

package x
class JBeen2 extends  JBeen1{
a1{}
a2{}
}

И в JSP:
<%
<%page import "x"%>1
JBeen2 a;
JBeen1 b = a;
b.a1() - и вот тут он почему-то ломиться в JBeen1.a1 и выдает "jsp1.jsp": a1() has protected access in JBeen1
%>
 


PM MAIL   Вверх
shimopus
Дата 15.11.2006, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 25.8.2006

Репутация: нет
Всего: 1



Какой-то глупый код... Вам не кажется? Выложите реальный исходник.
PM ICQ Skype GTalk   Вверх
Shurr
Дата 15.11.2006, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 24.10.2006

Репутация: 1
Всего: 7



Объяви методы бинов, к которым хочешь обращаться, как public.

Это сообщение отредактировал(а) Shurr - 15.11.2006, 11:56
PM MAIL   Вверх
batigoal
Дата 15.11.2006, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 16
Всего: 151



Твой полиморфизм пытается сузить область действия методов a1, a2. А наследники могут ее только расширять (либо оставлять неизменной). Поэтому сделай в классе B эти методы либо public, либо protected.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
iliot
Дата 15.11.2006, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 15.11.2006

Репутация: нет
Всего: нет



Вот код, вроде все правильно пишу...:

Код


//1
package untitled16;

abstract public class a_class{
  protected int a =1;
  //Access sample property
  protected abstract String getSample();

  //Access sample property
  protected abstract void setSample(String newValue);
}

//2
package untitled16;

public class Jsp1Bean extends a_class{
  private String sample = "Start value";

  public String getSample() {
    return sample;
  }

  public void setSample(String newValue) {
    if (newValue != null) {
      sample = newValue;
    }
  }
}
//jsp
<%@ page contentType="text/html; charset=windows-1251" %>
<%@ page import = "untitled16.*"%>
<html>
<head>
<title>
jsp1
</title>
</head>
<jsp:useBean id="jsp1BeanId" class="untitled16.Jsp1Bean" scope="session"/>
<jsp:setProperty name="jsp1BeanId" property="*" />
<body bgcolor="#ffffff">
<%untitled16.a_class aaa = jsp1BeanId;%>
<h1>
JBuilder Generated JSP___
<%=aaa.getSample()%> - вот здесь пишет getSample() has protected access in untitled18.a_class
</h1>
</body>
</html>



Если объявляешь методы первого класса как public все работает, как будто два бина в разных пакетах

Это сообщение отредактировал(а) iliot - 15.11.2006, 14:02
PM MAIL   Вверх
Sherst
Дата 15.11.2006, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 26.10.2005

Репутация: 2
Всего: 2



Для каждой jsp странички генерится соответствующий класс сервлета в пакете  package org.apache.jsp;

Там может быть проблема,  не уверен, но надо проверить такой момент.

файл JBeen1.java:
Код

package H;

abstract class JBeen1{
    protected void a1() {
    }
    protected void a2() {
    }
}


файл JBeen2.java:
Код

package H;

class JBeen2 extends  JBeen1{
    protected void a1() {        
    }
    protected void a2(){
    }
}


И например такой файл Test.java:
Код

package A;

import H.*;

public class Test {
  public static void main(String[] args) {
     JBeen2 d = new JBeen2();
     JBeen1  a = d;
     a.a1();
  }
}



Вопрос большей частью наверное относится к ветке обшие вопросы, я создаю объект класса и вызываю его protected метод в другом пакете будет ли такой код работать. Вот в чем вопрос.

А вообще методы бинов рекомендуется делать public а данные private.
PM MAIL   Вверх
Sherst
Дата 15.11.2006, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 26.10.2005

Репутация: 2
Всего: 2



Проверил, мои подозрения подтвердились.
Действительно нельзя вызвать protected метод класса если его объект создан не в том же пакете что и класс.
PM MAIL   Вверх
iliot
Дата 15.11.2006, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 15.11.2006

Репутация: нет
Всего: нет



Sherst спасибо, сформулировал вопрос по-человечески, а то я что-то уперся в стенку и очевидного не видел:

     JBeen2 d = new JBeen2();
     JBeen1  a = d;//вот с этим все нормально
     a.a1(); // а здесь нестыковка

Сразу возникает вопрос, как реализовать полиморфизм при использовании JSP, к которому подключаются бины с наследованием. 
Том кидает сервлеты из JSP-ок  в один пакет, а бины оказываются в другом. => та же ситуация как и в примере Sherst-а???

Помогите ламеру советом. Ведь как-то это решается.
PM MAIL   Вверх
batigoal
Дата 15.11.2006, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 16
Всего: 151



Цитата(iliot @  15.11.2006,  17:32 Найти цитируемый пост)
Ведь как-то это решается. 

Сделать методы публичными, как и советовал с самого начала Shurr smile


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
iliot
Дата 15.11.2006, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 15.11.2006

Репутация: нет
Всего: нет



Это конечно выход, но как-нибудь по-красивее нельзя?  smile 
PM MAIL   Вверх
batigoal
Дата 15.11.2006, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 16
Всего: 151



Цитата(iliot @  15.11.2006,  18:20 Найти цитируемый пост)
Это конечно выход, но как-нибудь по-красивее нельзя?  

Конечно, можно. Используй рефлексию - и вызывай себе хоть приватные методы smile А хошь - так и экземпляры абстрактных классов создавай smile
(шутю)


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1124 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.