我尝试在每个表单都有唯一名称的表单中设置struts标记。有没有办法像<s:token name="<some random generated characters>"
那样设置令牌。我打算使用TokenHelper.generateGUID()来生成令牌名称,如果可能的话。我尝试使用<s:set var="tokenName" value="<%=TokenHelper.generateUID()%>"/>
设置变量,然后使用<s:token name="${tokenName}"/>
设置令牌。我在设置标签时遇到错误。以下是表单的一般代码流程。
以下是我尝试过的事情,但结果相同。
<%@ page import="org.apache.struts2.util.TokenHelper" %>
<s:form action="actionName_method" name="actionName" method="post">
<s:token name="<%=TokenHelper.generateGUID()%>"/>
<s:hidden ....
.... rest of the fields go here ....
<s:submit value="save" name="submit"/>
</s:form>
我尝试的另一个是,
<%@ page import="org.apache.struts2.util.TokenHelper" %>
<s:set var="tokenName" value="${f:generateGUID()}"/>
<!-- I defined generateTokenName as a tld function using the TokenHelper class -->
<s:form action="actionName_method" name="actionName" method="post">
<s:token name="${tokenName}"/>
<s:hidden ....
.... rest of the fields go here ....
<s:submit value="save" name="submit"/>
</s:form>
这是我对tld文件中函数f:generateGUID()的定义。
<function>
<description>This will generate the a unique tokenName</description>
<name>generateGUID</name>
<function-class>org.apache.struts2.util.TokenHelper</function-class>
<function-signature>java.lang.String generateGUID()</function-signature>
</function>
提前谢谢。
答案 0 :(得分:1)
是的,可以使用
设置令牌名称<s:token name="%{tokenName}"/>
它将生成两个隐藏字段,一个用于令牌名称,另一个用于令牌值。确保第一个字段的值对应于第二个字段的名称。
动作属性tokenName
初始化为
tokenName = TokenHelper.generateGUID();
或
tokenName = UUID.randomUUID().toString();
还要确保表单使用POST
方法。