由于Liferay的Web Content默認不能自動保存為草稿,所以我需要實現(xiàn)這樣的功能。我發(fā)現(xiàn) Web 內容表單包含隱藏的輸入字段,其 id 為“ _com_liferay_journal_web_portlet_JournalPortlet_workflowAction ”,對于具有“草稿”狀態(tài)的 Web 內容,值=2 。另外,在Liferay的DB中journalarticle表中也有一個值為2的狀態(tài)列。我想我應該找到注入一些 JS 代碼的方法,檢查這樣的表單是否存在并且其字段的 value=2,如果是,則異步序列化和發(fā)送表單。我想知道是否有第二種方法可以檢查是否有任何 Web 內容被編輯以及 Java 端的狀態(tài)如何。然后我會注入 JS 代碼來序列化并提交表單,而不檢查任何源代碼。我正在考慮創(chuàng)建DynamicInclude實例類。但是,我被告知解決方案不應與編輯器關聯(lián),而應直接與 Web 內容關聯(lián),因為編輯器不會僅在創(chuàng)建 Web 內容期間使用,可能也會在其他地方使用。我得到一個提示,ResourceFilter可能會有所幫助,但在我看來,文檔中沒有對其進行足夠的描述,因此我無法理解它。我沒有修改 Liferay 組件的經驗,所以我不知道如何在實踐中使用所有這些知識。我很樂意提供任何提示。編輯:現(xiàn)在我已經成功添加了異步序列化并提交Web內容表單的JS代碼。問題是它只在第一次執(zhí)行(發(fā)送302 POST 請求并接收200 GET 響應)。下次提交嘗試后如果不刷新頁面,則僅發(fā)送200 個 POST 請求而沒有任何響應。有趣的是,此請求的預覽包含錯誤“自您開始編輯以來,另一個用戶已進行更改。請復制您的更改并重試。“。我不知道如何解決這個問題。我搜索了 Liferay 7.2 存儲庫并發(fā)現(xiàn),當新版本與舊版本不同時,會拋出帶有此錯誤消息的異常。這是沒有意義的,因為 Web Content將其保存為草稿后版本沒有改變,我什至在我的Java代碼中打印出了響應內容,看起來這些版本是相同的。我很高興獲得任何幫助,因為我不知道如何繼續(xù). 下面放上我的JavaScript代碼。window.saveDraft = function() { var form = $('form#_com_liferay_journal_web_portlet_JournalPortlet_fm1'); var url = form.attr('action'); var p_auth = new URLSearchParams(url).get('p_auth'); var language = form.find('#_com_liferay_journal_web_portlet_JournalPortlet_languageId').attr('value'); var contentInput = form.find( "input[id^='_com_liferay_journal_web_portlet_JournalPortlet_content_INSTANCE_']" ); var shortContentInputId = contentInput.attr('id'); var contentInputIdRandomPart = shortContentInputId.substr(shortContentInputId.length - 4, shortContentInputId.length); var content = contentInput.attr('value'); var fixedContent = content.replace(/\r?\n|\r/g, ''); //removing unnecessary line breaks })};
1 回答

尚方寶劍之說
TA貢獻1788條經驗 獲得超4個贊
我已經成功創(chuàng)建了將 Web 內容異步保存為草稿的模塊。在搜索引發(fā) ArticleVersionException 的位置時,我忘記檢查我的 IDE 是否標記了代碼中的所有事件。事實證明,在檢查提交日期是否正確的代碼片段中拋出了異常。這就是為什么我需要在提交表單后在代碼末尾設置實際時間戳值。在我的例子中,它是通過這行代碼達到的:
form.find('#_com_liferay_journal_web_portlet_JournalPortlet_formDate').val(new Date().valueOf());
添加回答
舉報
0/150
提交
取消