Jsf p:仪表板关闭后保持分拣顺序
我想使用这个primefaces仪表板 dashboard.xhtmlJsf p:仪表板关闭后保持分拣顺序,jsf,primefaces,jsf-2,Jsf,Primefaces,Jsf 2,我想使用这个primefaces仪表板 dashboard.xhtml <div style="height:500px"> <h:form> <p:growl id="msgs" showDetail="true" /> <p:dashboard id="board" model="#{dashboardView.model}"> <p:ajax event="reorde
<div style="height:500px">
<h:form>
<p:growl id="msgs" showDetail="true" />
<p:dashboard id="board" model="#{dashboardView.model}">
<p:ajax event="reorder" listener="#{dashboardView.handleReorder}" update="msgs" />
<p:panel id="sports" header="Sports">
<h:outputText value="Sports Content" />
</p:panel>
<p:panel id="finance" header="Finance">
<h:outputText value="Finance Content" />
</p:panel>
<p:panel id="lifestyle" header="Lifestyle">
<h:outputText value="Lifestyle Content" />
</p:panel>
<p:panel id="weather" header="Weather">
<h:outputText value="Weather Content" />
</p:panel>
<p:panel id="politics" header="Politics">
<h:outputText value="Politics Content" />
</p:panel>
</p:dashboard>
<div style="clear:both" />
</h:form>
</div>
这是一个非常酷的功能
我做了一些拖拽
然后关闭浏览器的选项卡并再次打开,然后所有内容都变成默认值
我得设法维持秩序
可能以某种方式或任何其他方式使用cookies。有可能吗?如果有,怎么做
重要的是,应该为每个用户保存小部件的顺序。我指的是两个选项之一:
当然不是最好的解决方案,而是一个解决方案: 我想我应该将handleReorder(DashboardReorderEvent事件)中的事件保存到数据库或文件中。并在postconstruct init中加载订单。你觉得怎么样 像在评论中写的那样编辑,无法为我序列化事件 我的第二次尝试是这样的:
public void handleReorder(DashboardReorderEvent event) {
FacesMessage message = new FacesMessage();
message.setSeverity(FacesMessage.SEVERITY_INFO);
message.setSummary("Reordered: " + event.getWidgetId());
message.setDetail("Item index: " + event.getItemIndex() + ", Column index: " + event.getColumnIndex() + ", Sender index: " + event.getSenderColumnIndex());
addMessage(message);
serializeEvent(event);
}
serializeEvent方法没有序列化事件,因为我失败了,但它使用必要的信息序列化了一个对象
private void serializeEvent(DashboardReorderEvent event) {
String userName = userBean.getUserName();
StackoverflowObject e = new StackoverflowObject(event);
try {
FileOutputStream fileOut =
new FileOutputStream("c:/tmp/events"+userName+".txt");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(e);
//out.writeObject(event.getWidgetId()+";"+ event.getItemIndex()+";"+ event.getColumnIndex());
out.close();
fileOut.close();
} catch (Exception i) {
i.printStackTrace();
}
}
在postconstruct init中,您读取序列化对象并决定将小部件放置在何处。这将向您展示这个想法(现在快凌晨1点了,所以我只向您展示一个开始)
。。对所有其他小部件执行相同的操作
现在,您还有一个问题,即每个用户都要这样做。方法反序列化事件确定用户并为此用户读取正确的文件
如果你问自己如何获得用户。在大多数情况下都是这样
FacesContext.getCurrentInstance().getExternalContext().getRemoteUser()
如果您有一个类似于我的示例中的loginbean,您可以从您的userBean获得它
编辑stackoverflowObject,如下所示
public class StackoverflowObject implements Serializable{
/**
*
*/
private static final long serialVersionUID = -4921468076398836905L;
private String widgetId;
private int columnId;
private int itenId;
public StackoverflowObject(DashboardReorderEvent event) {
this.setWidgetId(event.getWidgetId());
this.setColumnId(event.getColumnIndex());
this.setItenId(event.getItemIndex());
}
//+getter和setter当然不是最好的解决方案,而是一个解决方案: 我想我应该将handleReorder(DashboardReorderEvent事件)中的事件保存到数据库或文件中。并在postconstruct init中加载订单。你觉得怎么样 像在评论中写的那样编辑,无法为我序列化事件 我的第二次尝试是这样的:
public void handleReorder(DashboardReorderEvent event) {
FacesMessage message = new FacesMessage();
message.setSeverity(FacesMessage.SEVERITY_INFO);
message.setSummary("Reordered: " + event.getWidgetId());
message.setDetail("Item index: " + event.getItemIndex() + ", Column index: " + event.getColumnIndex() + ", Sender index: " + event.getSenderColumnIndex());
addMessage(message);
serializeEvent(event);
}
serializeEvent方法没有序列化事件,因为我失败了,但它使用必要的信息序列化了一个对象
private void serializeEvent(DashboardReorderEvent event) {
String userName = userBean.getUserName();
StackoverflowObject e = new StackoverflowObject(event);
try {
FileOutputStream fileOut =
new FileOutputStream("c:/tmp/events"+userName+".txt");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(e);
//out.writeObject(event.getWidgetId()+";"+ event.getItemIndex()+";"+ event.getColumnIndex());
out.close();
fileOut.close();
} catch (Exception i) {
i.printStackTrace();
}
}
在postconstruct init中,您读取序列化对象并决定将小部件放置在何处。这将向您展示这个想法(现在快凌晨1点了,所以我只向您展示一个开始)
。。对所有其他小部件执行相同的操作
现在,您还有一个问题,即每个用户都要这样做。方法反序列化事件确定用户并为此用户读取正确的文件
如果你问自己如何获得用户。在大多数情况下都是这样
FacesContext.getCurrentInstance().getExternalContext().getRemoteUser()
如果您有一个类似于我的示例中的loginbean,您可以从您的userBean获得它
编辑stackoverflowObject,如下所示
public class StackoverflowObject implements Serializable{
/**
*
*/
private static final long serialVersionUID = -4921468076398836905L;
private String widgetId;
private int columnId;
private int itenId;
public StackoverflowObject(DashboardReorderEvent event) {
this.setWidgetId(event.getWidgetId());
this.setColumnId(event.getColumnIndex());
this.setItenId(event.getItemIndex());
}
//+getter和setter为什么这“肯定”不是最好的解决方案?好主意。你能提供一个保存在文件中的示例代码吗?重要的是每个用户都应该保存订单。我可以给你写一个代码示例,但我想我今晚可以做(所以你必须等到今晚,在我工作的时候)。我还将为每个用户制作。重要的是为每个用户/浏览器/会话保存订单。如何将它写入每个设备的文件?为什么“肯定”不是最佳解决方案?好主意。你能提供一个保存在文件中的示例代码吗?重要的是每个用户都应该保存订单。我可以给你写一个代码示例,但我想我今晚可以做(所以你必须等到今晚,在我工作的时候)。我还将为每个用户制作。重要的是为每个用户/浏览器/会话保存订单。如何将它写入每个设备的文件?