Я собираюсь сделать это как можно короче:
У меня есть виджет sjt: tree на моей странице, который обновляется из кода jquery.Мне нужно, чтобы форма jsp, в которой находится дерево, могла быть отправлена в действие Struts2 при перезагрузке дерева.
КОД JSP:
<s:form id="formToSend" name="formToSend" theme="simple" cssClass="yform">
<s:hidden id="instSelected" name="instSelected"/>
<s:textfield id="inst" name="inst" theme="simple" style="width:85%" onblur="addHiddenValue()"/>
<s:url var="treeDataUrl" action="loadInstTree" namespace="/tree"/>
<sjt:tree
id="jsonTree"
href="%{treeDataUrl}"
onClickTopics="treeClickedProp"
formIds="formToSend"
jstreetheme="apple"
/>
</form>
Функция JS:
function addHiddenValue() {
var tmp= $('#inst').val();
$('#instSelected').val(tmp);
$('#inst').val('');
$('#jsonTree').jstree("refresh");
}
Struts.xml
<action name="loadInstTree"
class="es.nstmt.action.ReloadTreeAction"
method="loadInstTree">
<result type="json">
<param name="root">nodes</param>
</result>
</action>
ReloadTreeAction.java
public class ReloadTreeAction extends ActionSupport {
private String instSelected;
private List<TreeNode> nodes = new ArrayList<TreeNode>();
public String loadInstTree() {
final List<TreeNode> org = new ArrayList<TreeNode>();
if (!("".equals(instSelected)) && (instSelected!= null)) {
final TreeNode node = new TreeNode();
node.setId(instSelected);
node.setIcon("ui-icon-document");
node.setTitle(instSelected);
node.setState(TreeNode.NODE_STATE_OPEN);
org.add(node);
}
final TreeNode node = new TreeNode();
node.setId("Root");
node.setIcon("ui-icon-document");
node.setTitle("INST");
node.setState(TreeNode.NODE_STATE_OPEN);
node.setChildren(org);
nodes.add(node);
return SUCCESS;
}
public List<TreeNode> getNodes() {
return nodes;
}
public void setNodes(final List<TreeNode> nodes) {
this.nodes = nodes;
}
public String getInstSelected() {
return instSelected;
}
public void setInstSelected(final String instSelected) {
this.instSelected= instSelected;
}
}
Дерево корректно переопределяется, но значение переменной instSelected в коде Javaвсегда null, независимо от того, какой метод перезагрузки дерева я использую.Я также попытался определить reloadTopics внутри дерева sjt :, которое можно было вызвать из js-кода для «публикации», но этот метод только приводит к бесконечному циклу функции addHiddenValue .
Любая помощь будет высоко ценится.Спасибо всем заранее.