在Struts 2类http get params are auto fetched by field variables中。虽然在许多类中都重复了userId,groupId,
等类似的类字段,但我决定在每个类中创建一个业务对象类RequestParams
并将所有字段放在那里。
然后,我的所有课程都只有RequestParams rp;
getRp();
和setRp();
,rp类将userId
包含getter / setter和所有其他字段。
现在我知道我必须更换。例如userId
与getRp()
。getUserId();
在第34行现在代码看起来很难看。
这样:messageId = ChatDao.saveMessage(userId,groupId , message);
看起来像
rp.setMessageId( ChatDao.saveMessage(rp.getUserId(), rp.getGroupId(), rp.getMessag() ) );
做这些事情的更好方法是什么?
public class SendMessageOrStartChatAction extends BaseActoinSupport{
private static final long serialVersionUID = 1L;
private int userId;
private int groupType;
private int groupId;
private String groupTitle;
private String groupMemberIds;
private int randomCode;
private String message;
private int messageId; //internal class ues
@Override
/** boo */
protected void doExecute() throws IOException {
//check if it had random code in db, (msg already saved in db)
if(ChatDao.randomCodeExists(randomCode)){
messageId = ChatDao.getMessageIdThatMatchesRandomCode(randomCode);
write(messageId);
}else{
if(groupId <= 0){
//create group
groupId = ChatDao.createChatGroup(userId, groupTitle, groupType);
String[] memberIdsArray = groupMemberIds.split("==");
ChatDao.addUsersToGroup(groupId, memberIdsArray);
}
//save message
messageId = ChatDao.saveMessage(userId,groupId , message);
// queued: may be put this in last viewed messages here. may be.
write(messageId);
}
}
}
答案 0 :(得分:0)
这种方法没有错,如果你聚合一个类并想要访问它的属性,那么公共访问器适合你,你也可以通过OGNL访问它们。该操作位于valueStack
之上,因此表达式看起来会更加简单"rp.userId"
。无论如何,没有必要将所有参数传递给方法,您可以使用简化的方法签名
ChatDao.saveMessage(rp);
并在方法内部访问这些参数。