一个数据仓库Product.java如下:
public class Product{
private String product_id;
private String product_name; public String getProduct_id() {
return product_id;
}
public void setProduct_id(String product_id) {
this.product_id = product_id;
}
public String getProduct_name() {
return product_name;
}
public void setProduct_name(String product_name) {
this.product_name = product_name;
}
}
又有一个ProductPage.java 如下:
public class ProductPage {
private ArrayList browselist;
private ArrayList modifylist;
public ArrayList getModifylist() {
return modifylist;
}
public void setModifylist(ArrayList modifylist) {
this.modifylist = modifylist;
} public String toList(){
.......
.......
modifylist = XXXXX.YYYY();
browselist = new ArrayList();
for(int i=0;i<modifylist.size-1;i++){
browselist.add(modifylist.get(i));
}
return "list";
}
public String toModify() {
int i = 0;
String[] products_id = new String[modifylist.size()];
Iterator it = modifylist.iterator();
Iterator it2 = browselist.iterator();
while (it.hasNext()) {
Product PB = (Product) it.next();
Product PB2 = (Product) it2.next();
if (!(PB.product_name.equals(PB2.product_name))) {
products_id[i] = PB.getProduct_id();
i++;
}
}
......
......
return "next";
}
}
页面当中有如下代码片段:
<t:dataTable var = "list" value = "#{ProductPage.modifylist}">
<h:column>
<f:facet name="header">
<h:outputText value = "产品名" />
</f:facet>
<h:outputText value = "#{list.product_name}" />
</h:column>
</t:dataTable>
public class Product{
private String product_id;
private String product_name; public String getProduct_id() {
return product_id;
}
public void setProduct_id(String product_id) {
this.product_id = product_id;
}
public String getProduct_name() {
return product_name;
}
public void setProduct_name(String product_name) {
this.product_name = product_name;
}
}
又有一个ProductPage.java 如下:
public class ProductPage {
private ArrayList browselist;
private ArrayList modifylist;
public ArrayList getModifylist() {
return modifylist;
}
public void setModifylist(ArrayList modifylist) {
this.modifylist = modifylist;
} public String toList(){
.......
.......
modifylist = XXXXX.YYYY();
browselist = new ArrayList();
for(int i=0;i<modifylist.size-1;i++){
browselist.add(modifylist.get(i));
}
return "list";
}
public String toModify() {
int i = 0;
String[] products_id = new String[modifylist.size()];
Iterator it = modifylist.iterator();
Iterator it2 = browselist.iterator();
while (it.hasNext()) {
Product PB = (Product) it.next();
Product PB2 = (Product) it2.next();
if (!(PB.product_name.equals(PB2.product_name))) {
products_id[i] = PB.getProduct_id();
i++;
}
}
......
......
return "next";
}
}
页面当中有如下代码片段:
<t:dataTable var = "list" value = "#{ProductPage.modifylist}">
<h:column>
<f:facet name="header">
<h:outputText value = "产品名" />
</f:facet>
<h:outputText value = "#{list.product_name}" />
</h:column>
</t:dataTable>
解决方案 »
- 访问jsp页面报java.lang.ClassNotFoundExceptio
- 抓狂了,高手帮我看看这个Spring配置文件有什么问题啊!
- 还是时间转换问题.
- 谁有spring2.0 的包给小弟一个地址!
- 求 Head First EJB(中文版)
- 紧急求助!论文题目请给个建议!
- 急: <<精通EJB>>里的第一个无状态会话Bean如何在 weblogic8.1 下运行成功
- 关于文件操作的两个小问题~!***在线关注,马上给分***
- 关于spring 任务调度问题?
- tomcat运行不起来!不知道什么原因
- hibernate的菜鸟问题
- hibernate如何更新pojo中的部分字段,而不是所有的字段
if (!(PB.product_name.equals(PB2.product_name))) 这句应为
if (!(PB.getProduct_name.equals(PB2.getProduct_name)))
<h:outputText value = "#{list.product_name}" />这句按楼主的需要赢改为
<h:inputText value = "#{list.product_name}" />
下面我对上述代码做一下说明:
Product.java这个类没什么说的只是用来存储数据
ProductPage.java 这个类是具体操作的类 在JSF的配置文件里将它的传值方法设为session传值(这点很重要)
toList()方法是得到显示结果modifylist的方法(假设modifylist存储的是从数据库里取得的product_id和product_name) 也就是触发它得到结果然后通过return "list";导航到显示的页面上 其中的for循环是用来将modifylist做一个备份以便以后比较 当然你也可以用clone或其它方法达到相同的目的 这里只是为了演示
return "list";这句中的字符串"list"是在JSF配置文件里定义的导航字符串 用来导航到含有上面页面代码的页面
toModify()方法应该就是楼主想要的方法 也就是楼主所说的那一个按钮要触发的方法 因为ProductPage.java是用session传值所以modifylist始终存在所以在toModify()方法里可以直接用 用两个迭代器分别迭代修改过的modifylist和备份的browselist 并对其中的product_name属性进行比较 如果不同则将product_id取出存入数组String[] products_id
估计以上所写应该对楼主有所帮助吧
因为现在手上有工作 所以没办法专门调试 楼主在之前说到的“会乱掉”具体是怎么回事呢?可以具体描述一下么 或者你用断点调试跟踪一下看看是哪里出了问题 因为我上面的代码只是给出个思想 程序里可能会有错 这个问题我本身也很感兴趣 希望能通过继续的讨论把它解决掉
public class ProductPage {
private ArrayList browselist;
private ArrayList modifylist;
public ArrayList getModifylist() {
return modifylist;
}
public void setModifylist(ArrayList modifylist) {
this.modifylist = modifylist;
} public ArrayList getBrowselist() {
return Browselist;
}
public void setBrowselist(ArrayList browselist) {
this.browselist = browselist;
} public String toList(){
.......
.......
modifylist = XXXXX.YYYY();
browselist = XXXXX.YYYY(); //这句 够笨吧 和上句一样得到相同的结果集 因为之前的复制方法两个list里相对应的对象一样的所以当他们都调用getXXXX()取值时会出现问题 换这个方法试试 只是访问了2次数据库 比较差的解决办法 先试试看看能不能实现你想要的 然后再想优化的方法 先实现后优化嘛 ^_^
}
public String toModify() {
int i = 0;
String[] products_id = new String[modifylist.size()];
Iterator it = modifylist.iterator();
Iterator it2 = browselist.iterator();
while (it.hasNext()) {
Product PB = (Product) it.next();
Product PB2 = (Product) it2.next();
if (!(PB.getProduct_name.equals(PB2.getProduct_name))) {
products_id[i] = PB.getProduct_id();
i++;
}
}
......
......
return "next";
}
}
正如leojay1(绯村剑心) 所说“因为jsf 可以把你页面的list修改和后台自动绑定过去
所以你提交的时候,数据修改直接就体现在了那个list上了,而list 里面是bean信息”
其实当在toModify() 里操作modifylist时 modifylist就是那个已经改过的list 现在问题是楼主只想要改过的那些记录 而不是所有的 这就要比较哪些是改过的 我也在想有没有好的办法能知道哪些是改过的 希望能有高手给出好的办法
for(int i=0;i<modifylist.size-1;i++){
browselist.add(modifylist.get(i));
}
吧
确实不小心打错了 应当是i<modifylist.size; 不好意思
改下看看能好用不 不行的话就换后来说的访问2次数据库的方法
希望能有高手来指点一下 有什么比较好的办法 能知道一个list存的 对象 的属性 被改动过
1、先从数据库把数据输出到页面
2、获得从页面提交的数据,
3、把2次数据对比我猜想这1、2 两个步骤没有指定任何排序的方法,也无法指定,会不会在传递中把数据的次序排列弄混乱。这些数据的内容也有重复的,其实只要让我记录一下数据库的id到该条数据就可以了
可是就是没地方,我试了讲<h:inputText的 name和id属性设置为数据库中的id。但是都不允许。要是实在没办法,只能自己写一个可以带id的组件了,只是太浪费时间。
我想扩展一下原来的<h:inputText或者myfaces的<t:inputText 可是还没找到他的源代码的文件。
不知道放在哪个文件中?
“我猜想这1、2 两个步骤没有指定任何排序的方法,也无法指定,会不会在传递中把数据的次序排列弄混乱。”
上面那句我没太明白 因为ArrayList 本身是有序的 因此不会出现排列次序混乱的情况(指从modifylist取出再装入browselist 那这两个list里数据的顺序应该是一样的)“这些数据的内容也有重复的,其实只要让我记录一下数据库的id到该条数据就可以了”这句里的“数据库的id到该条数据就可以了”我没太理解 你能再具体描述一下你的需求么?
浏览器会不会把原来第2位置的那条数据先传回来呢?或者他是按照什么次序来传递数据的2、这到没什么,只是想说明下那些数据重复,如果没重复,到好办我直接对比就知道。
我的功能是修改产品分类数据。先将这些分类全部显示出来,然后修改,然后再保存回数据库,
我想一次性全部修改好后保存,但是修改后不知道这些数据对于原来的哪条了也可以我的方向错误了,我想自己写个组件也未必能解决
具体是这样的
比如:
百货
└卫生用品
└餐具
家电
└厨房电器
└烧水类是这样的一个不定深度的树组成的。页面显示用的是tree2,
让tree2每个节点显示为一个<h:inputText
然后修改了之后全部更新到数据库。所以我需要对应<h:inputText输出数据的那个id。啊。,你的做法应该确实是可行的,我现在明白了。原来我一直担心2次数据之间没关联,现在知道了
后台数据关联这一步是JSF自己完成的。
我们一起学习一起提高 叔的话你可以看一下这里xiekaiwen发的《请问树读取数据库的难题》也是比较靠上的帖子 也许对你会有用