Nach viel Forschung zu stackoverflow poste ich diese Frage, da ich keine Lösung für das Problem finden konnte.Struts2- URL-Tag - Suche ausblenden String
Anforderungsszenario: Aktualisiere einen Kunden aus einer Kundenliste basierend auf jeder Kundennummer als Parameter.
Lösung versucht: Basierend auf der Kunden-ID, die sie von der JSP erhalten haben, übergeben Sie sie an die Aktion als Struts2-URL-Tag.
Problem konfrontiert - Query String auf der URL sichtbar.
http://foo.com/Struts2Example/getCustomerAction?customerId=2
Fragen:
- Können wir die Query-String nicht verstecken, wenn wir Streben URL-Tag verwenden?
- Wenn wir die Verwendung der Abfragezeichenfolge nicht während der Verwendung von Url-Tag ausblenden können? Was ist die Alternative für das obige Szenario?
-Code für struts.xml, jsp und Aktion unter -
<h2>All Customers Details</h2>
<s:if test="customerList.size() > 0">
<table border="1px" cellpadding="8px">
<tr>
<th>Customer Id</th>
<th>First Name</th>
<th>Last Name</th>
<th>Age</th>
<th>Created Date</th>
</tr>
<s:iterator value="customerList" status="userStatus">
<tr>
<td><s:url var="editCustomer" action="getCustomerAction">
<s:param name="customerId" value="%{customerId}" />
</s:url>
<p>
<s:a href="%{editCustomer}">
<s:property value="customerId" />
</s:a>
</p></td>
<td><s:property value="firstname" /></td>
<td><s:property value="lastname" /></td>
<td><s:property value="age" /></td>
<td><s:date name="createdDate" format="dd/MM/yyyy" /></td>
</tr>
</s:iterator>
</table>
</s:if>
<br />
<br />
struts.xml-
<!-- Get Customer Details - To Pre-Populate the form to update a Customer -->
<action name="getCustomerAction" method="getCustomerById"
class="com.hcl.customer.action.CustomerAction">
<result name="success">pages/customerForm.jsp </result>
</action>
Kunden Aktion klassen
public class CustomerAction extends ActionSupport implements ModelDriven {
Logger logger = Logger.getLogger(CustomerAction.class);
Customer customer = new Customer();
List<Customer> customerList = new ArrayList<Customer>();
CustomerDAO customerDAO = new CustomerDAOImpl();
public Customer getCustomer() {
return customer;
}
//Set Customer onto Value Stack
public void setCustomer(Customer customer) {
this.customer = customer;
}
public List<Customer> getCustomerList() {
return customerList;
}
//Set Customer List onto Value Stack
public void setCustomerList(List<Customer> customerList) {
this.customerList = customerList;
}
public String execute() throws Exception {
return SUCCESS;
}
public Object getModel() {
return customer;
}
// Edit customer details, it will retrieve the records based on customerId
//SkipValidation is used to skip the validate()
@SkipValidation
public String getCustomerById() {
logger.info("** Customer Id to edit ** " + customer.getCustomerId());
customer = customerDAO.customerById(customer.getCustomerId());
return SUCCESS;
}
Warum möchten Sie die ID verstecken? Wenn Sie den Wert auf der Clientseite speichern, kann jeder die Quelle ansehen und abrufen. Sie können natürlich Post verwenden, um das Ergebnis zu senden, berücksichtigen Sie jedoch die Notwendigkeit für den Benutzer, die Seite mit einem Lesezeichen zu versehen. Wirklich die Antwort ist Sicherheit ... sollte dieser Benutzer auf diese Kundennummer zugreifen können? Wenn nicht, sollte es in keinem Fall erlaubt sein. – Quaternion
Ja, der Benutzer kann eine Seite wie diese mit einem Lesezeichen versehen ... aber die Frage lautet 'Aktualisieren Sie einen Kunden', während die URL' ** getCustomer ** Action? CustomerId = 2' ist ... etwas Seltsames hier:> –
@AndreaLigios - Das Szenario ist, um einen Kunden zu aktualisieren, muss ich seine Details auf dem Formular vorbelegen. Um die Details abzurufen, frage ich die Datenbank mit der customerId ab. –