Нужна помощь в обновлении старого кода JSP.Типы объектов в тегах tableData - PullRequest
1 голос
/ 01 июля 2019

Я пытаюсь обновить старый код JSF для работы с более новыми версиями (JDK 1.8.0_161, Apache Tomcat / 8.5.42, javax.faces-2.4.0, javax.servelet.jsp-api-2.3.3)

Тег dataTable возвращает неправильный класс для возвращенного набора данных, String вместо ServerBean.

Конкретная ошибка:

reason=500 - javax.servlet.ServletException: /server.jsp(132,9) '#{m.name}' Property [name] not found on type [java.lang.String]

Я исследовал это в течение 3 полных дней и пришел пустым.Существует JSF с HTML, который отображает таблицу с данными из базы данных.Проблема в том, что возвращаемая переменная должна быть классом java, но возвращается как строка.У меня ограниченный опыт работы с JSF / JSP, но я постараюсь включить то, что я считаю уместным.

  • Я обновил все для компиляции под 1.8
  • Я обновил DTD и DOCTYPE
  • Я обновил серьезные проблемы с HTML, о которых сообщил плагин Elipse Java EE
  • Я обновил коллекции в наборе кода Java, который должен быть напечатан: ArrayList до ArrayList<ServerBean>
  • Я убедился, что класс ServerBean находится в classpath <%@ page import="com.xxx.yyy.beans.ServerBean"%>

JSP:

<h:dataTable>
   </h4> <h:dataTable id="servers" value="#{serverdefn.serverList}" var="m" styleClass="font1">
    <h:column>
        <h:outputLink value="#{m.name}" />
        <h:outputText value="#{m.name}" />
    </h:column>
</h:dataTable>

WEB-INF / server-defn.xml:

<managed-bean>
    <managed-bean-name>server1</managed-bean-name>
    <managed-bean-class>com.xxx.yyy.beans.ServerBean</managed-bean-class>
    <managed-bean-scope>application</managed-bean-scope>
    <managed-property>
        <property-name>name</property-name>
        <value>Local</value>
    </managed-property>
...

</managed-bean>



<managed-bean>
    <managed-bean-name>serverlist</managed-bean-name>
    <managed-bean-class>java.util.ArrayList</managed-bean-class>
    <managed-bean-scope>application</managed-bean-scope>
    <list-entries>
        <value>#{server1}</value>
        <value>#{server2}</value>
    </list-entries>
</managed-bean>

ServerBean.java:

protected ArrayList<ServerBean> serverList;

public ArrayList<ServerBean> getServerList() {
    return serverList;
}

Поскольку предыдущая реализация работала, я полагаю, что она приведет к переменной m как ServerBean.Новый материал вводит его в виде строки.

Где / как можно указать тип возвращаемого объекта?Я надеялся, что добавление типов в коллекции java в ServerBean.java вызовет это, но это не сработало.Я также посмотрел, стоит ли мне что-то делать в XML, но это не так.

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