我正在使用 JSF 2.0 创建 Web 应用程序,并在其中分配用户查看项目。为此,我有两个清单。第一个列表包含未分配该项目的用户,列表 B 包含已分配该项目的用户。我们可以交换数据。
我的代码是
<t:selectManyListbox id="sourceCars" style="width: 40%;"
value="#{PersonalInformationDataBean.listOfUsers}" size="10">
<t:selectItems value="#{PersonalInformationDataBean.showAllMyRemData()}" var="t"
itemLabel="#{t.title}" itemValue="#{t.status}"/>
</t:selectManyListbox>
<span>
<input type="button" value=" >> " id="dbleMeRight"/>
<input type="button" value=" << " id="dbleMeLeft"/>
</span>
<t:selectManyListbox id="targetCars" style="width: 40%;"
value="#{PersonalInformationDataBean.listOfUsers}" size="10">
<t:selectItems value="#{PersonalInformationDataBean.showAllMyData()}" var="n"
itemLabel="#{n.title}" itemValue="#{n.status}"/>
</t:selectManyListbox>
<h:commandButton value="Save Edited Project Info." action="#{PersonalInformationDataBean.editPatentData(MyLogin.loginname)}" />
其中 t 是xmlns:t="http://myfaces.apache.org/tomahawk"
。
PersonalInformationDataBean.java
private List<String> listOfUsers = new ArrayList<String>();
private List<String> listOfUsers002 = new ArrayList<String>();
private List<CommonBean01> listOfListUsers = new ArrayList<CommonBean01>();
private List<CommonBean01> listOfListUsers002 = new ArrayList<CommonBean01>();
// above getter and setters
Iterator itr = listOfUsers.iterator();
System.out.println("list of usersssss == " + listOfUsers);
while (itr.hasNext()) {
psmtt = conn.prepareStatement("INSERT INTO patentInvite (invitedWhom, patentId, personalInfoId) VALUES (?,?,?)");
String inviteWhom = itr.next().toString();
System.out.println("to who we have invited is " + inviteWhom);
psmtt.setString(1, inviteWhom);
psmtt.setLong(2, patentId);
psmtt.setLong(3, personalInfoId);
psmtt.execute();
System.out.println("Data entered is == " + inviteWhom + "==" + patentId + "==" + personalInfoId + "==");
}
public List<CommonBean01> showAllMyRemData() {
try {
CommonBean01 commonBean = new CommonBean01();
listOfListUsers = new ArrayList<CommonBean01>();
ConnectToDatabase db = new ConnectToDatabase();
Connection conn = db.makeconnection();
PreparedStatement psmt = conn.prepareStatement("SELECT * FROM patentInvite WHERE patentId=?");
System.out.println("patent id here is " + patentId);
psmt.setLong(1, patentId);
ResultSet rs = psmt.executeQuery(), rs2 = null;
PreparedStatement pstt = null;
int dd = 0;
String listOfUser = "";
int myCounter = 0;
while (rs.next()) {
if (myCounter==0) {
listOfUser = "'" + rs.getString(2) + "'";
} else {
listOfUser = listOfUser + ",'" + rs.getString(2) + "'";
}
myCounter++;
}
System.out.println("id selected are :: " + listOfUser);
psmt = conn.prepareStatement("SELECT userid, fullName, userType FROM userDetails WHERE userid NOT IN (" + listOfUser + ")");
rs = psmt.executeQuery();
listOfListUsers = new ArrayList<CommonBean01>();
while (rs.next()) {
commonBean = new CommonBean01();
commonBean.setStatus(rs.getString(1));
commonBean.setTitle(rs.getString(2) + " [" + rs.getString(3) + "]");
listOfListUsers.add(commonBean);
System.out.println("wat say....(" + rs.getString(1) + ") -- " + rs.getString(2) + "");
}
return listOfListUsers;
} catch (Exception e) {
System.out.println("Exception = " + e);
return null;
}
}
public List<CommonBean01> showAllMyData() {
try {
CommonBean01 commonBean = new CommonBean01();
listOfListUsers = new ArrayList<CommonBean01>();
ConnectToDatabase db = new ConnectToDatabase();
Connection conn = db.makeconnection();
PreparedStatement psmt = conn.prepareStatement("SELECT * FROM patentInvite WHERE patentId=?");
System.out.println("patent id here is " + patentId);
psmt.setLong(1, patentId);
ResultSet rs = psmt.executeQuery(), rs2 = null;
PreparedStatement pstt = null;
listOfListUsers = new ArrayList<CommonBean01>();
while (rs.next()) {
System.out.println("");
pstt = conn.prepareStatement("SELECT userid, fullName, userType FROM userDetails WHERE userid=?");
pstt.setString(1, rs.getString(2));
System.out.println("setting id for " + rs.getString(1));
rs2 = pstt.executeQuery();
int dd = 0;
while (rs2.next()) {
System.out.println("inside data " + rs2.getString(2));
commonBean = new CommonBean01();
commonBean.setStatus(rs2.getString(1));
commonBean.setTitle(rs2.getString(2) + " [" + rs2.getString(3) + "]");
listOfListUsers.add(commonBean);
System.out.println("wat say here....(" + rs2.getString(1) + ") -- " + rs2.getString(2) + "");
}
}
return listOfListUsers;
} catch (Exception e) {
System.out.println("Exception = " + e);
return null;
}
}
CommonBean01.java
public class CommonBean01 {
private String title;
private String status;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final CommonBean01 other = (CommonBean01) obj;
if ((this.status == null) ? (other.status != null) : !this.status.equals(other.status)) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 5;
hash = 89 * hash + (this.status != null ? this.status.hashCode() : 0);
return hash;
}
}
现在,当我将用户从左列表带到右列表并单击
Save Edit Info
按钮时,我得到错误为targetCars: Validation Error: Value is not valid
.
笔记 :
当我不更改任何列表并单击Save Edit Info
时,它运行良好。
知道为什么我会收到此错误吗?
编辑 1
我做了以下更改
<t:selectManyListbox id="sourceCars" style="width: 40%;"
value="#{PersonalInformationDataBean.listOfUsers002}" size="10">
<t:selectItems value="#{PersonalInformationDataBean.showAllMyRemData()}" var="t"
itemLabel="#{t.title}" itemValue="#{t.status}"/>
</t:selectManyListbox>
public List<CommonBean01> showAllMyRemData() {
try {
CommonBean01 commonBean = new CommonBean01();
listOfListUsers002 = new ArrayList<CommonBean01>();
ConnectToDatabase db = new ConnectToDatabase();
Connection conn = db.makeconnection();
PreparedStatement psmt = conn.prepareStatement("SELECT * FROM patentInvite WHERE patentId=?");
System.out.println("patent id here is " + patentId);
psmt.setLong(1, patentId);
ResultSet rs = psmt.executeQuery(), rs2 = null;
PreparedStatement pstt = null;
int dd = 0;
String listOfUser = "";
int myCounter = 0;
while (rs.next()) {
if (myCounter==0) {
listOfUser = "'" + rs.getString(2) + "'";
} else {
listOfUser = listOfUser + ",'" + rs.getString(2) + "'";
}
myCounter++;
}
System.out.println("id selected are :: " + listOfUser);
psmt = conn.prepareStatement("SELECT userid, fullName, userType FROM userDetails WHERE userid NOT IN (" + listOfUser + ")");
rs = psmt.executeQuery();
listOfListUsers002 = new ArrayList<CommonBean01>();
while (rs.next()) {
commonBean = new CommonBean01();
commonBean.setStatus(rs.getString(1));
commonBean.setTitle(rs.getString(2) + " [" + rs.getString(3) + "]");
listOfListUsers002.add(commonBean);
System.out.println("wat say....(" + rs.getString(1) + ") -- " + rs.getString(2) + "");
}
return listOfListUsers002;
} catch (Exception e) {
System.out.println("Exception = " + e);
return null;
}
}
我仍然遇到同样的错误。
编辑 2
用于移动项目的 jQuery 代码如下。
$(function() {
var sourceCars=$('#sourceCars option').clone();
$('#filterDis').change(function() {
var val = $(this).val();
alert("changed me=="+val+"==");
$('#sourceCars').empty();
alert("changed me=="+sourceCars+"==");
sourceCars.filter(function(idx, el) {
var found=false;
$('#targetCars option').each(function(){
if ($(this).val()===$(el).text())
found=true;
});
alert(found);
if(found)
return false;
return val === 'ALL' || $(el).text().indexOf('[' + val + ']') >= 0;
}).appendTo('#sourceCars');
$("#targetCars option").attr("selected", "selected");
});
$('#sourceCars').dblclick(function() {
$('#sourceCars option:selected').appendTo('#targetCars');
$("#targetCars option").attr("selected", "selected");
});
$('#dbleMeRight').click(function() {
$('#sourceCars option:selected').appendTo('#targetCars');
$("#targetCars option").attr("selected", "selected");
});
$('#targetCars').dblclick(function() {
var targetList=$('#targetCars option:selected');
var filterVal= $('#filterDis').val();
if( filterVal === 'ALL' || targetList.text().indexOf('[' + filterVal + ']') >= 0)
targetList.appendTo('#sourceCars');
else
targetList.remove();
var foption = $('#sourceCars option:first');
var soptions = $.makeArray($('#sourceCars option:not(:first)')).sort(function(a, b) {
return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
});
$('#sourceCars').html(soptions).prepend(foption);
foption.attr("selected", true).siblings("option").removeAttr("selected");
$("#targetCars option").attr("selected", "selected");
});
$('#dbleMeLeft').click(function() {
var targetList=$('#targetCars option:selected');
var filterVal= $('#filterDis').val();
if( filterVal === 'ALL' || targetList.text().indexOf('[' + filterVal + ']') >= 0)
targetList.appendTo('#sourceCars');
else
targetList.remove();
var foption = $('#sourceCars option:first');
var soptions = $.makeArray($('#sourceCars option:not(:first)')).sort(function(a, b) {
return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
});
$('#sourceCars').html(soptions).prepend(foption);
foption.attr("selected", true).siblings("option").removeAttr("selected");
$("#targetCars option").attr("selected", "selected");
});
});
注意:如果我将项目从列表 B(右)移动到列表 A(左),它工作正常。但是当我将项目从列表 A(左)移动到列表 B(右)时,我收到了这个错误。