jsf2 make datatable row editable确实显示inputtext字段

时间:2014-08-13 12:39:49

标签: jsf datatable scope rendering edit

我正在尝试使用JSF2编辑数据表行。在调试中,editAction显示正确的行,但outputtext未转换为inputtext以允许编辑,执行编辑操作似乎存在渲染问题。我的bean是sessioncoped,当点击其中一个按钮(编辑,添加,删除,取消)时,方法getListaNoticias执行的次数与输入字段一样多。

我的代码:

historial.xhtml

    <h:form>
        <h:dataTable styleClass="tablaHistorial"
            value="#{historialBean.listaNoticias}" var="o">

            <h:column>
                <f:facet name="header">Fecha</f:facet>
                #{o.fecha}
            </h:column>

            <h:column>
                <f:facet name="header">Noticia</f:facet>
                <h:inputTextarea value="#{o.titulo}" rendered="#{o.editable}"/>
                <h:outputText value="#{o.titulo}" rendered="#{not o.editable}" />
            </h:column>

            <h:column>
                <h:commandButton action="#{historialBean.editAction(o)}">
                    <f:ajax render="@form" />
                </h:commandButton>
            </h:column>

            <h:column>
                <h:commandButton action="#{historialBean.save(o)}">
                    <f:ajax render="@form" execute="@form" />
                </h:commandButton>

            </h:column>
            <h:column>
                <h:commandButton action="#{historialBean.cancelarAccion(o)}">
                    <f:ajax render="@form" />
                </h:commandButton>
            </h:column>
            <h:column>
                <h:commandButton action="#{historialBean.borrar(o)}">
                    <f:ajax render="@form" />
                </h:commandButton>
            </h:column>

        </h:dataTable>

    </h:form>

historialBean class

    @ManagedBean
    @SessionScoped
    public class HistorialBean implements Serializable {

        private static final long serialVersionUID = 1L;

        public List<Noticia> listaNoticias;

        public HistorialBean() {
        }

        public String irAConsola() {
            return navigationBean.redirectToLoggedIn();


        public List<Noticia> getListaNoticias() {
                ConexionUtil conexion = new ConexionUtil();
                listaNoticias = new ArrayList<Noticia>();
                listaNoticias = conexion.prepararListaNoticiasBBDDExterna();
            return listaNoticias;
        }

        public void setListaNoticias(List<Noticia> listaNoticias) {
            this.listaNoticias = listaNoticias;
        }

        public void editAction(Noticia noticia) {
            noticia.setEditable(true);
        }

        public void editar(Noticia noticia) {
            ConexionUtil conexion = new ConexionUtil();
            conexion.editarNoticiaBBDDExterna(noticia);
            noticia.setEditable(false);
        }

        public void borrar(Noticia noticia) {
            ConexionUtil conexion = new ConexionUtil();
            conexion.deshabilitarNoticiaBBDDExterna(noticia);
        }

        public void cancelarAccion(Noticia noticia) {
            noticia.setEditable(false);
        }

    }

Noticia class

    public class Noticia {


        private String titulo;
        private String fecha;

        private boolean editable;



        public Noticia(String titulo,String fecha) {
            super();
            this.titulo = titulo;
            this.fecha = fecha;

        }

        public String getTitulo() {
            return titulo;
        }

        public void setTitulo(String titulo) {
            this.titulo = titulo;
        }

        public String getFecha() {
            return fecha;
        }

        public boolean isEditable() {
            return editable;
        }

        public void setEditable(boolean editable) {
            this.editable = editable;
        }


    }       

1 个答案:

答案 0 :(得分:1)

最后我解决了它在bean构造函数中创建列表的问题:

    public HistorialBean() {
            ConexionUtil conexion = new ConexionUtil();
            listaNoticias = new ArrayList<Noticia>();
            listaNoticias = conexion.prepararListaNoticiasBBDDExterna();
    }


    public List<Noticia> getListaNoticias() {

        return listaNoticias;
    }