gpt4 book ai didi

jsf - 在Richfaces中来回管理

转载 作者:行者123 更新时间:2023-12-04 20:23:41 25 4
gpt4 key购买 nike

我正在使用RichFaces组件库,并且想要管理Ajax导航的历史记录,因此最终用户可以使用浏览器的后退和前进按钮。

有什么干净的方法可以做到这一点,设计模式,库等吗?

最佳答案

您可以使用RSH处理Ajax历史记录

对于该示例,假设您有一个页面,用户应在其中选择一种颜色。
然后,使用XmlHttpRequest将选定的颜色发布到服务器。

现在,我们想在按下后退和前进导航按钮时恢复先前的选择。

代码示例

bean 角,扁 bean :

public class Bean {

private static final String DAFAULT_COLOR = "green";

private Map<String, Color> colors;
private Color selectedColor;
private String restoredColor;

@PostConstruct
public void init() {
this.colors = new HashMap<String, Color>();
this.colors.put("green", new Color("Green", "008000"));
this.colors.put("blue", new Color("Blue", "0000FF"));
this.colors.put("red", new Color("Red", "FF0000"));
this.colors.put("purple", new Color("Purple", "FF0000"));
this.colors.put("purple", new Color("Purple", "800080"));
this.colors.put("yellow", new Color("Yellow", "FFFF00"));
this.colors.put("silver", new Color("Silver", "C0C0C0"));
this.colors.put("black", new Color("Black", "000000"));
this.colors.put("white", new Color("White", "FFFFFF"));

this.selectedColor = this.colors.get(DAFAULT_COLOR);
}

public void setSelectedColor(ActionEvent event) {
UIComponent component = event.getComponent();
String color = ((String)component.getAttributes().get("color")).toLowerCase();
this.selectedColor = this.colors.get(color);
}

public void restoreColor() {
if(restoredColor.equals("") || restoredColor.equals("null")) {
restoredColor = DAFAULT_COLOR;
}

this.selectedColor = this.colors.get(restoredColor);
}

public List<Color> getColors() {
return Arrays.asList(colors.values().toArray(new Color[0]));
}

public Color getSelectedColor() {
return selectedColor;
}

public String getRestoredColor() {
return restoredColor;
}

public void setRestoredColor(String restoredColor) {
this.restoredColor = restoredColor.toLowerCase();
}

}

看法:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:t="http://myfaces.apache.org/tomahawk"
xmlns:c="http://java.sun.com/jstl/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich"
template="/WEB-INF/template/default.xhtml">

<ui:define name="head">
<script type="text/javascript" src="#{request.contextPath}/js/rsh/rsh.js"></script>
<script type="text/javascript">
window.dhtmlHistory.create({
toJSON: function(o) {
return Object.toJSON(o);
},
fromJSON: function(s) {
return s.evalJSON();
}
});

Event.observe(window, 'load', function() {
dhtmlHistory.initialize();
dhtmlHistory.addListener(handleHistoryChange);
});

var registerHistoryPoint = function(newLocation, historyData) {
dhtmlHistory.add(newLocation, historyData);
};
</script>
</ui:define>

<ui:define name="content">
<a4j:form id="frmColor">
<div class="colors">
<ul>
<a4j:repeat value="#{bean.colors}" var="color">
<li style="background:##{color.hex};">
<a4j:commandLink value="&#160;"
actionListener="#{bean.setSelectedColor}"
reRender="frmColor"
oncomplete="registerHistoryPoint('#{color.name}', '#{color.name}');">
<f:attribute name="color" value="#{color.name}"/>
</a4j:commandLink>
</li>
</a4j:repeat>
</ul>
</div>
<div class="selection" style="background:##{bean.selectedColor.hex};">
<div class="selected-color"
style="color: ##{bean.selectedColor.name eq 'White' or
bean.selectedColor.name eq 'Yellow' ? '000000' : 'ffffff'}">
<h:outputText value="#{bean.selectedColor.name}"/>
</div>
</div>
<a4j:jsFunction name="handleHistoryChange" reRender="frmColor"
action="#{bean.restoreColor}">
<a4j:actionparam name="historyData" assignTo="#{bean.restoredColor}" />
</a4j:jsFunction>
</a4j:form>
</ui:define>
</ui:composition>

现在,当用户单击一种颜色时,就会调用 registerHistoryPoint。这将注册 historyData,它将在按下后退和前进按钮时传递给Bean。

例如
  • 用户选择黄色。
  • 黄色已注册。
  • 用户选择蓝色。
  • 蓝色已注册。
  • 用户单击返回。
  • 黄色已恢复。
  • 用户单击前进。
  • 蓝色已恢复。
  • 关于jsf - 在Richfaces中来回管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3439697/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com