Я пытаюсь обновить старый код 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, но это не так.