我有一个注册活动的功能,为此,在每个活动中我都有一个注册按钮,它调用相应的控制器:
在按钮下方有一个输入字段,我在其中指示用户想要注册的活动的 ID,在问候语旁边我们看到用户的 ID。
<h:column>
<f:facet name = "header">Apuntarse</f:facet>
<h:commandButton value="Apuntarse" action="#{controladorParticipaciones.apuntarse}" />
<h:inputHidden id="idActividad" value="#{actividad.id}"/>
</h:column>
控制器代码是:
package controlador.control_Participaciones;
import java.util.List;
import javax.annotation.Resource;
import javax.enterprise.context.SessionScoped;
import javax.faces.context.FacesContext;
import javax.inject.Named;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.sql.DataSource;
import modelo.Actividad;
/**
* Servlet implementation class ControladorActividades
*/
@WebServlet("/ControladorParticipaciones")
@Named
@SessionScoped
public class ControladorParticipaciones extends HttpServlet {
private static final long serialVersionUID = 1L;
@Resource(lookup="jdbc/practica1")
private DataSource miPool;
private long idUsuario;
private long idActividad;
private Actividad activity;
public String apuntarse() {
FacesContext context = FacesContext.getCurrentInstance();
boolean encontrada = false;
@SuppressWarnings("unchecked")
List<Actividad> actividades = (List<Actividad>) context.getExternalContext().getSessionMap().get("actividades");
for (Actividad actividad_aux : actividades) {
if(actividad_aux.getId() == idActividad) {
context.getExternalContext().getSessionMap().put("actividad", actividad_aux);
activity = actividad_aux;
encontrada = true;
break;
}
}
if(!encontrada) {
context.getExternalContext().getSessionMap().put("msg", "No hemos podido encontrar la actividad");
return "error";
}
return "apuntarse";
}
public long getIdUsuario() {
return idUsuario;
}
public void setIdUsuario(long idUsuario) {
this.idUsuario = idUsuario;
}
public long getIdActividad() {
return idActividad;
}
public void setIdActividad(long idActividad) {
this.idActividad = idActividad;
}
public Actividad getActivity() {
return activity;
}
public void setActivity(Actividad activity) {
this.activity = activity;
}
}
用箭头表示的变量的值始终为0,但我希望它是输入字段的值。JSF填写输入,因为输入的Value字段不同......
如何将活动 id 的值传递给控制器?输入或其他方式。
回答我的问题,我找到了几种方法,但我认为最有效的是将值作为参数发送给方法:
在控制器中:
只需您的注册方法接收 idActivity 参数并直接从操作中传递它。您不需要隐藏输入:
和控制器:
如果这样更方便,您也可以传递活动对象。您可以通过 commandButtom 中的 f:ajax 更新此数据。
版:
请注意,如果您的方法在这种情况下返回字符串“注册”,您将刷新整个页面。相反,如果您返回 NULL,您将留在其中,您可以使用 f:ajax 更新一些数据。
编辑2:
事实是我不知道它是否是 inputHidden,据说它不可见,但它显示在您的图表中。
编辑 3:如果它是 inputHidden 然后传递活动对象并摆脱所有搜索:
和控制器: