2013-02-17 2 views
0

Я хочу создать редактирование, удалить ссылку в теге display с помощью struts2. Это мой JSP кодКак передать значения в строке, которую я хочу удалить/изменить в класс действия из jsp в struts2, используя тег отображения?

<%@ page contentType="text/html; charset=UTF-8"%> 
<%@ taglib prefix="s" uri="/struts-tags"%> 
<%@taglib uri="http://displaytag.sf.net" prefix="display" %> 
<html> 
<head> 

    <title>Contact Manager - display tag Example</title> 
    <link href="css/style.css" rel="stylesheet" type="text/css" /> 
</head> 
<body> 
<display:table name="contactList" requestURI="" pagesize="10" export="true" cellpadding="1" uid="sr" cellspacing="1" size="50" 
    defaultorder="ascending" sort="list" style="width:850" 
    id="row"> 
      <display:column property="id" title="serial no" sortable="true" /> 
      <display:column property="lastName" title="TV Show" sortable="true" /> 
      <display:column property="firstName" title="User Name" sortable="true" /> 
      <display:column property="emailId" title="Email Id" sortable="true" /> 

      <display:column media="html" 
    title="Delete" 
    style="text-align:center"> 
    <s:url id="deleteUrl" action="deleteLink"> 
    <s:param name="id1" value="#attr.row.id" /> 
    </s:url> 
    <s:a href="%{deleteUrl}"> 
     Delete 
    </s:a> 
</display:column> 

<display:column media="html" 
title="edit" 
style="text-align:center"> 
<a href="deleteLink?id=<s:property value="id"/>">edit</a> 
</display:column> 

      <display:setProperty name="export.excel.filename" value="ActorDetails.xls"/> 
      <display:setProperty name="export.pdf.filename" value="ActorDetails.pdf"/> 
      <display:setProperty name="export.pdf" value="true" /> 
     </display:table> 



</body> 
</html> 

это мой класс действия:

package net.viralpatel.contact.view; 

    import java.util.List; 

    import net.viralpatel.contact.controller.ContactManager; 
    import net.viralpatel.contact.model.Contact; 

    import com.opensymphony.xwork2.ActionSupport; 


    public class ContactAction extends ActionSupport implements ModelDriven<Contact>,Preparable { 

     private static final long serialVersionUID = 9149826260758390091L; 

     private Contact contact; 
     private List<Contact> contactList; 


     private ContactManager linkController; 

     public ContactAction() { 
      linkController = new ContactManager(); 
     } 



     public String getRecords() 
     { 
      contactList =linkController.lSist(); 

      return SUCCESS; 
     } 

     public String deleteRecord() 
     { 
      System.out.println(contact.getId()); 

      return SUCCESS; 
     } 

     public Contact getContact() { 
      return contact; 
     } 

     public List<Contact> getContactList() { 
      return contactList; 
     } 

     public void setContact(Contact contact) { 
      this.contact = contact; 
     } 

     public void setContactList(List<Contact> contactsList) { 
      this.contactList = contactsList; 
     } 


@Override 
    public Contact getModel() { 

     return contact; 
    } 

    @Override 
    public void prepare() throws Exception { 
     // TODO Auto-generated method stub 
     contact = new Contact(); 
    } 
    } 

Как получить значения атрибутов в строке, которую я удалить со страницы JSP в deleteRecord метод() в классе ContactAction? ЗДЕСЬ заявление

System.out.println("ID IS "+contact.getId()); 

дает выход: ID IS NULL

Просьба предложить какое-то решение.

Благодаря

это Контактный боб

package net.viralpatel.contact.model; 

import java.io.Serializable; 
import java.sql.Date; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Entity 
@Table(name="Contacts") 
public class Contact implements Serializable{ 

    private static final long serialVersionUID = -8767337896773261247L; 

    private Long id; 
    private String firstName; 
    private String lastName; 
    private String emailId; 
    private String cellNo; 
    private Date birthDate; 
    private String website; 

    private Date created; 

    @Id 
    @GeneratedValue 
    @Column(name="id") 
    public Long getId() { 
     return id; 
    } 
    @Column(name="firstname") 
    public String getFirstName() { 
     return firstName; 
    } 
    @Column(name="lastname") 
    public String getLastName() { 
     return lastName; 
    } 
    @Column(name="email_id") 
    public String getEmailId() { 
     return emailId; 
    } 
    @Column(name="cell_no") 
    public String getCellNo() { 
     return cellNo; 
    } 
    @Column(name="birthdate") 
    public Date getBirthDate() { 
     return birthDate; 
    } 
    @Column(name="website") 
    public String getWebsite() { 
     return website; 
    } 
    @Column(name="created") 
    public Date getCreated() { 
     return created; 
    } 
    public void setId(Long id) { 
     this.id = id; 
    } 
    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 
    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 
    public void setEmailId(String emailId) { 
     this.emailId = emailId; 
    } 
    public void setCellNo(String cellNo) { 
     this.cellNo = cellNo; 
    } 
    public void setBirthDate(Date birthDate) { 
     this.birthDate = birthDate; 
    } 
    public void setCreated(Date created) { 
     this.created = created; 
    } 
    public void setWebsite(String website) { 
     this.website = website; 
    } 
} 

ответ

0

Здесь есть ответ, который мы можем использовать <s:bean> для создания экземпляра класса компонента, а затем <s:param> выступает в качестве метода сеттер, значения которых могут быть получены в класс действия, используя get методы тер класса боб Контакты

<display:column media="html" 
    title="Delete" 
    style="text-align:center"> 
    <s:url id="deleteUrl" action="deleteLink"> 
    <s:bean name="net.viralpatel.contact.model.Contact"></s:bean> 
    <s:param name="id" value="#attr.row.id"></s:param> 
    <s:param name="firstName" value="#attr.row.firstName"></s:param> 
    </s:url> 
    <s:a href="%{deleteUrl}"> 
     Delete 
    </s:a> 
</display:column> 
0

Вот что the documentation говорит о дисплее: теге таблицы:

ID: Смотрите "UID".

uid: уникальный идентификатор, используемый для идентификации этой таблицы. Объект, представляющий текущую строку, также добавляется в pageContext под этим именем, так что вы можете ссылаться на него в телах столбцов, используя $ {uid}. Вы также можете использовать uid_rowNum для ссылки на текущий номер строки. Две таблицы на одной странице не могут иметь один и тот же идентификатор (пейджинг и сортировка повлияют на оба). Если не указано «htmlId», то для html-идентификатора сгенерированной таблицы будет использоваться одно и то же значение.

(курсив мой)

Так выбрать между id и uid (и не указать идентификатор в два раза, что вы делаете) в теге вместо использования обоих, а затем (если вы держите UID), используйте $ {ср}, чтобы обратиться к текущему элементу:

<s:param name="id1" value="${sr.id}" /> 
+0

Это дает org.apache.jasper.JasperException: в соответствии с TLD или директивой атрибута в файле тега значение атрибута не принимает никаких выражений. – user2077648

+0

Вам, вероятно, необходимо передать выражение OGNL, но я не владею синтаксисом OGNL. Вероятно, что-то вроде '# sr.id' –

+0

Здесь, ответ, мы можем использовать для создания экземпляра класса bean, а затем действует как метод setter, значения которого могут быть получены в классе действий с использованием методов getter класса bean Contact – user2077648

1

Вы можете использовать

#attr.uidOfYourTable.property 

в вашем случае

<display:column media="html" title="edit" style="text-align:center"> 
    <a href="deleteLink?id=<s:property value="#attr.sr.id"/>">edit</a> 
</display:column> 

(оставляя тот факт, что ваша правка ссылка указывает на DeleteLink действий: O)

0

Вы можете написать примерно:

 <display:column property="status" title="Status" sortable="true" paramId="aid" paramProperty="aid" href="/MsgSystem/adminread" />