Hallo Leute,
habe ein ziemliches Problem mit der Erweiterung eines JSF-Projektes.
Aber ganz kurz zum Projekt.
Projekt WebLogViewer (wlv)
Grundsätzlich geht es darum Logs von Servern (durch Agenten) abzuholen und diesen auf einer zentralen Weboberfläche bereit zu stellen.
Komplett in Java geschrieben bzw die Weboberfläche mit JSF.
Zu meiner Aufgabe
Es gibt auf der Weboberfläche eine Funktion mit der man Agenten hinzufügen kann.
Diese Funktion sollte ich um ein DropDown-Feld erweitern (Auswahl ob Windows oder Unix Server).
(Die Erweiterungen im Hintergrund für die Datenbank und das Eintragen dieses Feldes sind schon abgearbeitet)
Hier rauchts aber!
form:adminOS: Validierungsfehler: Wert ist keine gültige Auswahl form:adminOS: Validierungsfehler: Wert ist keine gültige Auswahl
Hier mal ein Ausschnitt der XHTML-Datei
<ui:define name="content">
<h:form id="form">
<div class="editForm">
<h3>${title}</h3>
<br/>
<h2>Eigenschaften</h2>
<br/>
<t:panelGrid border="0" columns="2" cellpadding="3" >
<!-- name -->
<wlv:gridInput label="Name"
value="${AdminAgentBean.currentItem.name}" immediate="false"
id="agentName" required="true" title="Namen des Agents">
</wlv:gridInput>
<!-- uri -->
<wlv:gridInput label="URI"
value="${AdminAgentBean.currentItem.uri}" immediate="false"
id="agentURI" required="true" title="Vollständige URI des Agenten">
</wlv:gridInput>
<!-- agent os -->
<h:panelGroup>
OS Name
</h:panelGroup>
<h:panelGroup>
<h:selectOneMenu value="${AdminAgentBean.currentItem.os}" id="adminOS" title="Betriebsystem des Agents">
<t:selectItems value="${AdminAgentOSBean.items}" var="item" itemLabel="#{item.name}" itemValue="#{item}"/>
<f:converter converterId="AgentConfigOSConverter"/>
</h:selectOneMenu>
</h:panelGroup>
<!-- description -->
<h:panelGroup>
Beschreibung
</h:panelGroup>
<h:panelGroup>
<h:inputTextarea rows="4" cols="70" required="false"
value="${AdminAgentBean.currentItem.description}" styleClass="standard" />
</h:panelGroup>
<!-- show in log's agent list -->
<h:panelGroup>
Sonstiges
</h:panelGroup>
<h:panelGroup>
<label>
<h:selectBooleanCheckbox value="${AdminAgentBean.currentItem.eligibleForLogFiles}"/>
Agent ist für Logs auswählbar
</label>
<label>
<h:selectBooleanCheckbox value="${AdminAgentBean.currentItem.remoteManagable}"/>
Agent kann über Server verwaltet werden
</label>
</h:panelGroup>
</t:panelGrid>
<br/>
<div class="buttonArray">
<h:commandButton immediate="true" action="${AdminAgentBean.cancelEdit}" class="button" value="Abbrechen"/>
<h:commandButton action="${AdminAgentBean.saveItem}" class="button" value="Speichern"/>
</div><br/>
</div>
</h:form>
<a4j:keepAlive beanName="AdminAgentBean" />
</ui:define>
Zum besseren Verständnis:
Datenbank Sicht
Es gibt eine Tabelle Agentconfig, die die verschiedenen Agenten enthält.
Diese hat eine Viele zu 1 Verbindung zur Tabelle Operationsystem, die die möglichen Betriebssysteme enthält.
Operationsystem enthält lediglich
1 UNIX
2 Windows
Java Sicht
Es gibt das Object AgentConfig
Agentconfig hat ein Object mit namen OS.
OS ist das Object AgentConfigOS
Der Fehler liegt wohl irgendwo in dem Convert, der dafür verantwortlich ist, aus dem DropDown-Feldwert ein Objekt zu bekommen, was wieder in die AgentConfig als OS eingetragen werden.
Hier mal der Convert
/*
* AgentConfigConverter.java
*
* Created on November 1, 2008, 2:14 PM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package de.*mein_Unternehmen*.wlv.server.faces.converters;
import de.*mein_Unternehmen*.wlv.common.domain.AgentConfigOS;
import de.*mein_Unternehmen*.wlv.server.shared.JpaUtils;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
/**
* Converts an AgentConfigOS object to string and back
*/
public class AgentConfigOSConverter implements Converter {
@Override
public Object getAsObject(FacesContext facesContext, UIComponent uIComponent, String id) throws ConverterException {
try {
AgentConfigOS object = (AgentConfigOS)JpaUtils.findObject(AgentConfigOS.class, Long.valueOf(id));
return object;
//return null;
} catch (Exception ex) {
return null;
}
}
@Override
public String getAsString(FacesContext facesContext, UIComponent uIComponent, Object object) throws ConverterException {
if (object instanceof AgentConfigOS) {
return String.valueOf(((AgentConfigOS)object).getId());
} else {
return "-1";
}
}
}
Der Convert muss ein korrektes Objekt von AgentConfigOS zurück liefern, was er auch tut.
Keine Exception oder der gleichen. Das Objekt hat eigentlich auch die richtige Befüllung...
Dennoch, scheint es bei der Validierung zu haken...
Wenn ich per F7 (Netbeans) durchsteppe, lande ich direkt nach dem
return object;
beim Neuladen der Seite (was durch den Fehler verursacht wird)
Es wird dann nur
form:adminOS: Validierungsfehler: Wert ist keine gültige Auswahl form:adminOS: Validierungsfehler: Wert ist keine gültige Auswahl
ausgeben.
Weiß irgendjemand etwas dazu?
Braucht ihr noch zusätzliche Informationen?
Noch ganz kurz zu mir:
Bin 18 und Auszubildender im 2. (bald im 3.) Jahr zum Fachinformatiker.
Gelernt habe ich bis jetzt Cobol, C, C# (Berufsschule), HTML
Hatte vor diesem Projekt keinen Kontakt mit Java oder JSF.
War etwas schwer zu verstehen, da dieses Projekt ja nicht direkt "Hello World" oder der gleichen ist.
Langsam steige ich aber recht gut durch