通过f:setPropertyActionListener发送数据

时间:2014-12-10 13:26:34

标签: ajax jsf primefaces

我是JSF的新手,我有一个带有单选按钮的<p:dataTable>,我想选择一个单选按钮然后按<p:commandButton>然后我会转到其他页面我希望看到选择信息。

的index.xhtml

<h:form id="form">
    <p:dataTable id="radioDT"
                 var="emp"
                 value="#{empresaBean.getEmpresaList()}"
                 selection="#{empresaBean.selectedEmpresa}"
                 rowKey="#{emp.CLAVE}">

        <f:facet name="header">
            Lista de Empresas
        </f:facet>
        <p:column selectionMode="single" style="width:16px;text-align:center"/>
        <p:column headerText="Id">
            <h:outputText value="#{emp.CLAVE}" />
        </p:column>

        <p:column headerText="Nombre Empresa">
            <h:outputText value="#{emp.NOMBRE}" />
        </p:column>

        <p:column headerText="AÑO">
            <h:outputText value="#{emp.EJERCICIO}" />
        </p:column>

        <f:facet name="footer">

            <p:commandButton action="#{empresaBean.View}" value="Seleccionar" title="Ir Menu" rowKey="#{emp.CLAVE}" >
                <f:setPropertyActionListener target="#{empresaBean.empresa}" value="#{empresaBean.selectedEmpresa}" />
            </p:commandButton>

EmpresaBean.java

@ManagedBean(name="empresaBean")
@ViewScoped
@Component
public class EmpresaBean {

    @Autowired
    private EmpresaService empresaService;
    private Empresa empresa;
    private Empresa selectedEmpresa;
    private DataModel model;

    public EmpresaService getEmpresaService() {
        return empresaService;
    }

    public Empresa getSelectedEmpresa() {
        return selectedEmpresa;
    }

    public void setSelectedEmpresa(Empresa selectedEmpresa) {
        this.selectedEmpresa = selectedEmpresa;
    }

    public void setEmpresaService(EmpresaService empresaService) {
        this.empresaService = empresaService;
    }

    public EmpresaBean(){} 

    public List<Empresa> getEmpresaList(){

        return empresaService.getAll();
    }

    public Empresa getEmpresa() {
        return empresa;
    }
    public void setEmpresa(Empresa empresa) {
        this.empresa = empresa;
    }  

    public String View() {
       // empresa = (Empresa) model.getRowData();
        return "/pages/menu/menuPrincipal?faces-redirect=true";
    }


}

menuPrincipal.xhtml(ouput)

<h:head>
      <title>Menu Principal</title>
   </h:head>
<h:body>
    <h:form>
     <h:outputText value="#{empresaBean.empresa}" />  
    #{empresaBean.empresa}
    <h:outputText value="#{empresaBean.selectedEmpresa}" /> 
    #{empresaBean.selectedEmpresa}

当我转到menuPrincipal时,我看到了这一点。

com.atorresbr.springapp.model.Empresa@5ea928

但我希望看到

Clave: 123
Nombre: John
Año:2014 by example.

2 个答案:

答案 0 :(得分:1)

你看到的是在你的对象上调用的toString()方法的输出,看你所描述的输出覆盖toString()方法,在你的Empressa类中添加如下方法,设置属性名称我只是从你的小脸猜测

@Override
public String toString() {
    return "Empressa{" +
            "CLAVE='" + CLAVE + '\'' +
            ", NOMBRE='" + NOMBRE + '\'' +
            ", AÑO='" + ANO + '\'' +
            '}';
}

一个可以有用的示例http://www.geeksforgeeks.org/overriding-tostring-method-in-java/

答案 1 :(得分:0)

因为您的empresaBean.empresa不包含文本。这是课堂。 h:outputText仅显示文本值。