Java 使用struts2 json插件
我有一个抽象类,它看起来如下所示,带有针对私有属性的适当getter和setter(为了保持post排序而省略): 然后我有一个非常简单的类,如下所示:Java 使用struts2 json插件,java,json,struts2,struts2-json-plugin,Java,Json,Struts2,Struts2 Json Plugin,我有一个抽象类,它看起来如下所示,带有针对私有属性的适当getter和setter(为了保持post排序而省略): 然后我有一个非常简单的类,如下所示: public class SearchCityDistanceAjaxAction extends CityDistanceAwareAction { @Override public String perform() { if (getCityDistance() == null) { addActionErro
public class SearchCityDistanceAjaxAction extends CityDistanceAwareAction {
@Override
public String perform() {
if (getCityDistance() == null) {
addActionError("No city distance found for that pair");
return ERROR;
}
return SUCCESS;
}
}
public CityDistance getAjaxCityDistance() {
return getCityDistance();
}
<action name="searchCityDistance" class="searchCityDistanceActionAjaxAction">
<result type="json">
<param name="ignoreHierarchy">false</param>
<param name="excludeProperties">
cityDistanceRepository
</param>
<param name="includeProperties">
cityDistance.*
</param>
</result>
<result name="error" type="json">
<param name="ignoreHierarchy">false</param>
<param name="includeProperties">
actionErrors.*
</param>
</result>
</action>
我的想法是我可以发送字符串cityA和字符串cityB。进行查找并通过AJAX简单地返回cityDistance
对象
当我设置我的struts.xml
操作时,如下所示:
<action name="searchCityDistance" class="searchCityDistanceAjaxAction">
<result type="json">
<param name="includeProperties">
cityDistance.*
</param>
</result>
<result name="error" type="json">
<param name="ignoreHierarchy">false</param>
<param name="includeProperties">
actionErrors.*
</param>
</result>
</action>
并将struts文件更改为:
<result type="json">
<param name="includeProperties">
ajaxCityDistance.*
</param>
</result>
AjaxCity距离*
它给了我我第一次尝试的期望
(commonLogger.java:68)-添加include属性表达式:
ajaxCityDistance.*(commonLogger.java:68)-
[JSON]{“ajaxCityDistance”:{“cityPair”:{“cityA”:{“cityName”:“American”
瀑布,id:68},城市B:{“城市名称”:“Ririe”,id:119},距离:85}
最好从mySearchCityDistanceAjaxAction
中删除getter,因为父级中已经提供了getter。这里有我遗漏的东西吗?或者这是它应该发挥作用的方式吗
提前感谢。我可以将struts.xml文件更改为以下内容:
public class SearchCityDistanceAjaxAction extends CityDistanceAwareAction {
@Override
public String perform() {
if (getCityDistance() == null) {
addActionError("No city distance found for that pair");
return ERROR;
}
return SUCCESS;
}
}
public CityDistance getAjaxCityDistance() {
return getCityDistance();
}
<action name="searchCityDistance" class="searchCityDistanceActionAjaxAction">
<result type="json">
<param name="ignoreHierarchy">false</param>
<param name="excludeProperties">
cityDistanceRepository
</param>
<param name="includeProperties">
cityDistance.*
</param>
</result>
<result name="error" type="json">
<param name="ignoreHierarchy">false</param>
<param name="includeProperties">
actionErrors.*
</param>
</result>
</action>
假的
城市癌症住院医师
城市距离*
假的
操作错误*
但是,使用excludeProperties来忽略我的城市旅游景点,还是有点可疑。如果必须这样做,我想我会这么做,但希望有更好的解决方案。在
CityDistanceAwareAreaction
类中是否有公共getCityDistance()
方法?是的,CityDistanceAwareAreaction
中有getCityDistance()
方法-它明确指出IncludeProperty采用正则表达式,因此cityDistance.*将所有字段与其名称中的cityDistance匹配。您只需跳过(.*)项,它就可以按预期工作,而不需要排除属性。@coding\u idiot您知道这就是我的想法,但是。。。当我只做cityDistance时,它会发送一个空对象。@coding\u傻瓜好吧,所以我今天早上上班的时候去了,试了一下你的建议。我删除了*
和excludeProperties
,得到了以下返回的(commonlogger.java:68)-添加了include属性表达式:cityDistance
和(commonlogger.java:68)-[JSON]{“cityDistance”:{}
,正如您所看到的,它是空的:-(是“cityDistance”可序列化?@coding\u是的,确实是。必须仔细检查,但它是可序列化的。它的组件也是。