我是JSF的新手,我正在与一个JPA实体一起从事一个小型项目,但是今天在项目上工作,我有几个疑问和一些问题。我对JSF的所有知识是从书籍中。
问题是:
当我单击列表全按钮时,列表会加载正常并显示我在DB中的数据,但是当我单击一行列中的删除按钮时,它无能为力,似乎像刷新页面。如果我将Bean的范围更改为SessionsCope,则可以正常工作。我阅读的大多数书都显示了带有RequestScope的Crud操作的示例,其他一些互联网文章则显示了相同的示例。
创建和更新操作以另一种XHTML页面(crearbeneficiario.xhtml和eactleizarbeneficiario.xhtml(中的另一种形式处理的创建和更新操作。
我在Payara服务器上使用JSF 2.3 5.192和Eclipse IDE 4.12
如果您能带领我走上正确的道路,我将非常感谢。
我附上一些图像图片1删除之前单击图像2删除后单击
在我的listarbeneficiario.xhtml(部分代码(中
<h:form>
<button type="submit" class="btn btn-block btn-sm" jsf:action="#{navigationController.goCrearBeneficiario()}">Nuevo beneficiario</button>
<hr />
<button type="submit" class="btn btn-block btn-sm" jsf:action="#{beneficiarioController.listBeneficiariosTodos()}">Listar Todos</button>
<hr />
</h:form>
<h:form>
<h:dataTable value="#{beneficiarioController.beneficiarios}" var="b" styleClass="table table-hover"headerClass="verderuralp-color white-text">
<h:column>
<f:facet name="header">Nombre</f:facet>
<h:outputText value="#{b.nombre}" />
</h:column>
<h:column>
<f:facet name="header">A. Paterno</f:facet>
<h:outputText value="#{b.apellidoPaterno}" />
</h:column>
<h:column>
<f:facet name="header">A. Materno</f:facet>
<h:outputText value="#{b.apellidoMaterno}" />
</h:column>
<h:column>
<f:facet name="header">CURP</f:facet>
<h:outputText value="#{b.curp}" />
</h:column>
<h:column>
<h:commandButton action="#{beneficiarioController.deleteBeneficiario(b.beneficiarioId)}" value="Eliminar"/>
</h:column>
</h:form>
这是我的CDI BEAN(部分代码(
@Data
@NoArgsConstructor
@Named
@RequestScoped
public class BeneficiarioController
implements Serializable
{
private static final long serialVersionUID = 1L;
private String mensaje;
private String desde;
private String hasta;
private String busqueda;
private BeneficiarioDto beneficiarioDto = new BeneficiarioDto();
private List<Beneficiario> beneficiarios = new ArrayList<Beneficiario>();
@EJB
private BeneficiarioService beneficiarioService;
public void deleteBeneficiario( Beneficiario b ) {
try {
beneficiarioService.deleteBeneficiario( b.getBeneficiarioId() );
mensaje = "El beneficiario fue dado de baja";
} catch ( EntidadNoEncontrada e ) {
mensaje = e.getMessage();
}
beneficiarios = beneficiarioService.listBeneficiariosPorEstado( true );
}
public void listBeneficiariosTodos() {
this.beneficiarios = beneficiarioService.listBeneficiariosPorEstado( true );
}
答案就像@kukeltje说
通过在请求和会话之间使用SOPE:ViewScoped中的SOPE仍然可以使用它。非常适合这个