jsf - metodos - listas en java
Se agregó String a ArrayList no se muestra/no se actualiza (1)
Lo arreglé, finalmente!
Gracias a User @Kukeltje, que me insinuó las cosas básicas de que me equivoqué, y User @Wietlol que me motivó en el chat a través del apoyo moral y ''cree en mí'' :)
La solución:
..en Application.java:
public List<Feed> sentNotifications = new ArrayList<>();
public List<String> emails = new ArrayList<>();
public List<String> words = new LinkedList<>(Arrays.asList("vuln", "banana", "pizza", "bonanza"));
public List<String> feeds = new LinkedList<>(
Arrays.asList("http://www.kb.cert.org/vulfeed",
"https://ics-cert.us-cert.gov/advisories/advisories.xml",
"https://ics-cert.us-cert.gov/alerts/alerts.xml")
);
private String currentEmail;
private String currentFeed;
private String currentWord;
[...]
public void addEmail() {
emails.add(currentEmail);
}
..y gui.xhmtl:
<!-- EMAILS -->
<h3>Configured Emails</h3>
<h:form>
<h:inputText value="#{Application.currentEmail}" var="email"/>
<h:commandButton value="Add Email" action="#{Application.addEmail}"/>
</h:form>
<h:form>
<ui:repeat var="email" value="#{Application.emails}">
<tr>
<td>#{email}</td>
<td>
<f:facet name="header">Action</f:facet>
<h:commandLink value="Delete" action="#{Application.rmEmail(email)}"/>
</td>
</tr>
<br></br>
</ui:repeat>
</h:form>
Observe cómo action="#{Application.addEmail}"
no utiliza argumentos, sino que el parámetro se transfiere al método mediante value="#{Application.currentEmail}"
.
Si usted, lector, tiene el mismo problema, considere estos puntos:
- getter / setter para cada campo en el frijol
- campos primitivos!
- métodos sin argumentos para ''delegar'' los campos primitivos, por ejemplo, mi método addEmail
Espero que esta respuesta sea útil para personas que tengan el mismo problema.
Saludos, Gewure
Esta pregunta ya tiene una respuesta aquí:
... Así que tengo mi @ApplicationScoped Bean "Aplicación" ..:
@ManagedBean(name = "Application")
@ApplicationScoped
public class Application implements Serializable {
private boolean isRunning = false;
private ArrayList<Feed> sentNotifications = new ArrayList<>();
private ArrayList<String> emails = new ArrayList<>(
Arrays.asList("[email protected]", "[email protected]")
);
private LinkedList<String> words = new LinkedList<>(
Arrays.asList("vuln","banana","pizza","bonanza")
);
private LinkedList<String> feeds = new LinkedList<>(
Arrays.asList("http://www.kb.cert.org/vulfeed",
"https://ics-cert.us-cert.gov/advisories/advisories.xml",
"https://ics-cert.us-cert.gov/alerts/alerts.xml")
);
... y desea agregar un Strings to ArrayList<String> emails
usando el método:
public String addEmail(String email) {
emails.add(email);
return null;
}
El Facelet es el siguiente:
<!-- EMAILS -->
<h3>Configured Emails</h3>
<h:form>
<h:inputText value="Email" var="email"/>
<h:commandButton value="Add Email" action="#{Application.addEmail(email)}"/>
</h:form>
<h:form>
<ui:repeat var="email" value="#{Application.emails}">
<tr>
<td>#{email}</td>
<td>
<f:facet name="header">Action</f:facet>
<h:commandLink value="Delete" action="#{Application.rmEmail(email)}"/>
</td>
</tr>
<br></br>
</ui:repeat>
</h:form>
... así que cuando intento agregar "[email protected]", este es el resultado:
- Se muestra un botón de eliminación, pero no la cadena en sí misma.
- ¿Se ha agregado correctamente la cadena y JSF no reenvía la vista ...?
- ¿O no se ha agregado correctamente la cadena?
¡por favor ayuda! Gracias.