2014-01-16 5 views
3

У меня есть небольшой сценарий. У меня есть два класса POJO и две таблицы User и Domain (то же имя для таблиц). Каждый пользователь будет принадлежать одному и только одному домену.Вызывающая функция класса Action в Jsp Struts2

У меня есть два класса действий один - UsersManagemntAction, а другой - DomainsManagementAaction. Я использую UsersManagemntAction для выполнения операций CRUD, связанных с пользователями. В моем классе User у меня есть атрибут domainId. Этот атрибут будет содержать idDomain, к которому принадлежит пользователь. Моя проблема в том, что я, когда показываю информацию о пользователе на странице jsp, показываю domainId с информацией о пользователях. Это связано с тем, что пользовательский объект будет иметь domainId. Вместо того, чтобы показывать domainId Я хочу показать доменное имя. Я не могу выполнить запрос соединения. что я решил решить эту проблему, что, когда я показываю информацию пользователя, я вызываю функцию в классе действия управления пользователями, передавая эту функцию domainId. Эта функция выполняет поиск по таблице Domain и возвращает доменное имя. Эти решения не работают, потому что я не нашел способа передать domainId этой функции. Я могу назвать функцию UsersManagemntAction класс, но не может пройти domainId. Пожалуйста, помогите мне или иным образом предложите мне альтернативное решение.

Ниже приведен код страницы JSP и класс User.

JSP:

<s:if test="users.size() > 0"> 
<tbody> 
    <s:iterator value="users" > 
     <tr> 
      <td><s:property value="userId" /></td> 
      <td><s:property value="loginId" /></td> 
      <td><s:property value="password" /></td> 

<td><s:property value="email" /></td> 
<td><s:property value="domainName" /></td> <!--- It will call getDomainName function in action class --> 
</td> 
</tr> 
</s:iterator> 
</tbody> 

User.java:

public class User { 
private Long userId; 
private String loginId; 
private String password; 
private String email; 
private Long domainId; 

public String getPassword() { 
    return password; 
} 

public void setPassword(String password) { 
    this.password = password; 
} 

public Long getDomainId() { 
    return domainId; 
} 

public void setDomainId(Long domainId) { 
    this.domainId = domainId; 
} 



public void setUserId(Long userId) { 
    this.userId = userId; 
} 

public Long getUserId() { 
    return userId; 
} 

@Override 
public String toString() { 
    return "User [domainId=" + domainId + ", password=" + password + ", userId=" + userId + ", Login Id=" + getLoginId() + "]"; 
} 

public String getLoginId() { 
    return loginId; 
} 

public void setLoginId(String loginId) { 
    this.loginId = loginId; 
} 

public String getEmail() { 
    return email; 
} 

public void setEmail(String email) { 
    this.email = email; 
} 

} 
+1

JSP: '' Действие: 'public String domainName (Long domainId) {...}'. –

+0

@AleksandrM Спасибо, его работа тоже. –

ответ

3

Вы можете получить его из стека значений, в то время как вы итерация User объект на вершине стоимости чтобы получить его там

public String getDomainName(){ 
    User user = (User) ActionContext.getContext().getValueStack().peek(); 
    return domainService.findDomainById(user.getDomainId()).getName(); 
} 
+0

Woah, это приятно ... +1 –

+0

Это один классный :-) –

+0

@Roman Спасибо за ваш ответ. У меня также есть другой вопрос о моем подходе, если у меня есть тысячи пользователей для отображения, а затем Если я вызываю эту функцию и использую класс domainService для выполнения операции поиска в базе данных для каждого отдельного пользователя, тогда это станет проблематичным с точки зрения оптимального решения? Можете ли вы предложить другой подход или это правильно? –

Смежные вопросы