Установить идентификатор каждой строки в ссылке в таблице данных - PullRequest
0 голосов
/ 26 октября 2010

У меня есть страница, которая перечисляет все из моей таблицы сообщений, это выглядит так:

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <title>TODO supply a title</title>
</head>
<body>
    <p>
        <h:dataTable id="grid1" value="#{postControle.lista}" var="post1">
            <h:column>
                <f:facet name="header"><h:outputText style="float: left; font-weight: bold;" value="Titulo"/></f:facet>
                #{post1.titulo}
            </h:column>
            <h:column>
                <f:facet name="header"><h:outputText style="float: left; font-weight: bold;" value="Texto"/></f:facet>
                #{post1.texto}
            </h:column>
            <h:column>
                <f:facet name="header"><h:outputText style="float: left; font-weight: bold;" value="Opções"/></f:facet>
                <a href="#{postControle.requestManager('alterar',post1.id)}">Alterar</a> |
                <a href="#{postControle.requestManager('consultar',post1.id)}">Consultar</a>
            </h:column>
        </h:dataTable>
    </p>
</body>

Что я хочу, чтобы в конце каждой строки 2 ссылкиодин для обновления и другой для действий показа получают идентификатор этого определенного сообщения, но так как он устанавливает каждый идентификатор как последний результат в списке.Как я могу это исправить?

Редактировать: Вот сгенерированный HTML:

</p> <pre><code><head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>TODO supply a title</title> </head> <body> <p><table id="grid1"> <thead> <tr> <th scope="col"><span style="float: left; font-weight: bold;">Titulo</span></th> <th scope="col"><span style="float: left; font-weight: bold;">Texto</span></th> <th scope="col"><span style="float: left; font-weight: bold;">Opções</span></th> </tr> </thead> <tbody> <tr> <td> testeZ </td> <td> testeZ </td> <td><a href="./faces/alterar.xhtml">Alterar</a> | <a href="./faces/consultar.xhtml">Consultar</a></td> </tr> <tr> <td> testeZ </td> <td> testeZ </td> <td><a href="./faces/alterar.xhtml">Alterar</a> | <a href="./faces/consultar.xhtml">Consultar</a></td> </tr> <tr> <td> testeZ </td> <td> testeZ </td> <td><a href="./faces/alterar.xhtml">Alterar</a> | <a href="./faces/consultar.xhtml">Consultar</a></td> </tr> <tr> <td> asdasdsa </td> <td> asdsadsad </td> <td><a href="./faces/alterar.xhtml">Alterar</a> | <a href="./faces/consultar.xhtml">Consultar</a></td> </tr> <tr> <td> ddddd </td> <td> dddd </td> <td><a href="./faces/alterar.xhtml">Alterar</a> | <a href="./faces/consultar.xhtml">Consultar</a></td> </tr> <tr> <td> </td> <td> </td> <td><a href="./faces/alterar.xhtml">Alterar</a> | <a href="./faces/consultar.xhtml">Consultar</a></td> </tr> <tr> <td> </td> <td> </td> <td><a href="./faces/alterar.xhtml">Alterar</a> | <a href="./faces/consultar.xhtml">Consultar</a></td> </tr> <tr> <td> dsakhgdsail </td> <td> woaiuheaoiusrhjgsohrspuiohpousrhpiojnojho </td> <td><a href="./faces/alterar.xhtml">Alterar</a> | <a href="./faces/consultar.xhtml">Consultar</a></td> </tr> </tbody> </table> </p> </body>

1 Ответ

1 голос
/ 27 октября 2010

Я не уверен в том, что вы хотите сделать в конце, но почему бы вам не использовать <h:commandLink> (который сгенерирует тег <a> HTML) вместо этого (не забудьте вложить свой <h:datatable> в <h:form>)?

<h:form id="myForm">
    ...
    <h:dataTable id="grid1" value="#{postControle.lista}" var="post1">
        ...
        <h:column>
            <f:facet name="header"><h:outputText style="float: left; font-weight: bold;" value="Opções"/></f:facet>
            <h:commandLink action="#{postControle.alterar}" value="Alterar"/>
            <h:commandLink action="#{postControle.consultar}" value="Consultar"/>
        </h:column>
    </h:dataTable>

Затем вы определяете два действия в вашем Java-бине (возвращенное значение String определяет случай навигации, который будет применяться после выполнения метода):

public String alterar() {
    ...
}

public String consultar() {
    ...
}

И в каждом методе действия вы можете получить соответствующий элемент (т.е. post1), используя метод getRowData() компонента HtmlDatatable:

public String alterar() {
    HtmlDatatable table = (HtmlDatatable) FacesContext.getCurrentInstance().getViewRoot().findComponent("myForm:id1");
    YourClass element = (YourClass) table.getRowData();
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...