我有两个jsp文件如下:
myform.jsp
<%@ page contentType='text/html; charset=UTF-8' errorPage='' %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<s:form id="myform" name="myform" namespace="/" theme='simple' action='createPage' method='post'>
<table width='100%'>
<tr>
<td>
<table width='100%'>
<s:select id='parameterDataType' name='parameterDataType' theme="xhtml" required="true" key='param.datatype' list='#application.myList' emptyOption="true" listKey='listKey' listValue='listValue'/>
</table>
<table width='100%'>
<s:if test="parameterDataType != null">
<tr id='defParameterDefaultValue'>
<td class="tdLabel" >
<s:label cssClass="label" key="param.value"/></td>
<td ><%@ include file='/pages/datatypes.jsp' %></td>
</tr>
</s:if>
</table>
</td>
</tr>
</table>
</s:form>
<script language='JavaScript' type='text/JavaScript'>
<s:url id="reloadPage" namespace="/" action="reloadPage" />
function reloadPage()
{
var form = document.forms[0];
form.action = '<s:property value="reloadPage"/>';
form.action += '?parameterDefaultValue=';
form.submit();
}
$("#parameterDataType").change(function()
{
reloadPage();
});
</script>
和
datatype.jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="sj" uri="/struts-jquery-tags"%>
<s:if test="parameterDataType == 'CODE' ">
<s:textfield id='parameterDefaultValue' name='parameterDefaultValue' theme="simple" size='27'/>
</s:if>
<s:if test="parameterDataType == 'DATE' ">
<sj:datepicker id='parameterDefaultValue' name='parameterDefaultValue' parentTheme="simple" displayFormat="%{session.sessionAttr.pref.dateDisplayformat}" appendText="%{session.sessionAttr.pref.dateAppendText}" changeMonth="%{session.sessionAttr.pref.changeMonth}" changeYear="%{session.sessionAttr.pref.changeYear}"/>
</s:if>
<s:if test="parameterDataType == 'BUSINESS_UNIT' ">
<s:select id='parameterDefaultValue' name='parameterDefaultValue' theme="simple" list='#session.businessUnitSelectList' listKey='id' listValue='name' emptyOption='true' />
</s:if>
<s:if test="parameterDataType == 'TERM' ">
<s:select id='parameterDefaultValue' name='parameterDefaultValue' theme="simple" list='#session.termList' listKey='id' listValue='description' emptyOption='true' />
</s:if>
和一个动作类方法
public String reloadPage()
{
return SUCCESS;
}
我的目标是根据myform.jsp中选择的值在datatype.jsp中显示一个字段。 例如,当用户从myform.jsp选择中选择CODE时,页面将重新加载以包含datatype.jsp。如果我使用属性标签,即
<s:property value="parameterDataType" />
在datatype.jsp中打印parameterDataType的值,我得到值CODE但它从不进入if语句。 请问有什么我做错了吗?如果有更好的方法来实现这一点,我将不胜感激。
答案 0 :(得分:2)
我后来使用我在本网站上获得的类似技术解决了这个问题
<s:if test="parameterDataType == @com.myenum.Values@CODE">
DO SOMETHING
</s:if>
感谢您的回复
答案 1 :(得分:0)
使用主题标签('#')尝试<s:if test="#parameterDataType == 'CODE' ">
。
主题标签在OGNL中用于引用变量。在一些Struts2标记(例如属性标记)中,没有必要使用hashtag,因为它隐含了一个变量被引用,即属性标记的'value'属性将始终引用一个变量,因此没有必要使用hashtag来指定该值是一个变量。
答案 2 :(得分:0)
OGNL不是很神奇,如果parameterDataType是一个字符串,那么只需使用字符串方法,如下所示:
<s:if test="parameterDataType.equalsIgnoreCase('CODE')">
DO SOMETHING
</s:if>