Forum post where the source of this wiki page can be found:
http://jboss.com/index.html?module=bb&op=viewtopic&t=124919
The below code uses jsFunction to call the jsonTest backing bean that generates some random data in a JSON String.
That JSON String is then passed to the updateFields method, which evaluates it and populates some html tags with its content.
XHTML Code:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:rich="http://richfaces.ajax4jsf.org/rich"
xmlns:a4j="http://richfaces.org/a4j">
<ui:define name="content">
<script lang="javascript" >
function updateFields(data){
var myObj = eval("("+ data +")");
document.getElementById('cpty').innerHTML = myObj.cpty;
document.getElementById('exposure').innerHTML = myObj.exposure;
document.getElementById('limit').innerHTML = myObj.limit;
}
</script>
<a4j:form>
<a4j:jsFunction name="testJsFunc"
action="#{jsonTest.actionMethod}"
data="#{jsonTest.jsonData}"
ajaxSingle="true"
ignoreDupResponses="true"
eventQueue="foo"
oncomplete="updateFields(data);" >
<a4j:actionparam name="Param1" assignTo="#{jsonTest.cptyParam}"></a4j:actionparam>
</a4j:jsFunction>
</a4j:form>
<table>
<tr>
<td>
<a href="#" onclick="testJsFunc('VALUE1')">Set for VALUE1</a>
</td>
</tr>
<tr>
<td>
<a href="#" onclick="testJsFunc('VALUE2')">Set for VALUE2</a>
</td>
</tr>
<tr>
<td>
<a href="#" onclick="testJsFunc('VALUE3')">Set for VALUE3</a>
</td>
</tr>
<tr>
<td>
<a href="#" onclick="testJsFunc('VALUE4')">Set for VALUE4</a>
</td>
</tr>
</table>
<table>
<tr>
<th>Counterparty</th>
<th>Exposure</th>
<th>Limit</th>
</tr>
<tr>
<th>
<h:outputText id="cpty" value=""></h:outputText>
</th>
<th>
<h:outputText id="exposure" value=""></h:outputText>
</th>
<th>
<h:outputText id="limit" value=""></h:outputText>
</th>
</tr>
</table>
</ui:define>
</ui:composition>
Managed bean:
If you are not familiar with the annotations, they are from the Seam framework and can be
removed and replaced with a managed bean definition in faces-config.xml.
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.richfaces.json.JSONException;
import org.richfaces.json.JSONObject;
@Name("jsonTest")
@Scope(ScopeType.EVENT)
public class JsonTest {
public String cptyParam;
public String jsonData;
public String actionMethod(){
Random rand = new Random(System.currentTimeMillis());
Map<String,String> data = new HashMap<String,String>();
data.put("cpty", cptyParam);
data.put("exposure", ""+(rand.nextFloat()*10) );
data.put("limit", ""+(rand.nextInt(50)));
jsonData = toJSON(data);
return null;
}
public String toJSON(Map<String,String> data){
JSONObject dataToJSON = new JSONObject();
try{
dataToJSON.put("cpty", data.get("cpty"));
dataToJSON.put("exposure", data.get("exposure"));
dataToJSON.put("limit", data.get("limit"));
}
catch (JSONException e){
//TODO Approriate exception handling
e.printStackTrace();
}
return dataToJSON.toString();
}
public String getCptyParam() {
return cptyParam;
}
public void setCptyParam(String aCptyParam) {
cptyParam = aCptyParam;
}
public String getJsonData() {
return jsonData;
}
public void setJsonData(String aJsonData) {
jsonData = aJsonData;
}
}
Comments